• 数组



    数组是一个相同类型的变量的集合,注意数组是长度固定的,而且本身也属于引用类型
    之前说过字符串和数组经常使用,所以这里先讲一下下字符串和字符数组互转


    // 字节/字符 数组转成字符串
    char[] arr1 = {'a','b','c','d','e','f'};
    byte[] arr2 = {'1','2','3'};
    String a = new String(arr1);
    String b = new String(arr2);
    System.out.println(a);
    System.out.println(b);
    
    //字符串转 字符/字节 数组
    char[] c = b.toCharArray();
    for(int i = 0;i < c.length;i++){
    	System.out.println(c[i]);
    }
    
    byte[] d = a.getBytes();
    for(int i = 0;i < d.length;i++){
        System.out.println(d[i]);
    }
    

    声明创建数组

    //静态声明
    int[] arr = {1,2,3,4,6};
    int[] arr = new int[]{1,2,3,4,5,6}
    
    //动态声明
    int[] arr = new int[10]	//声明长度,不可少
    arr[0] = 10	//手动赋值
    

    二维数组

    Java 并不直接支持二维数组,但也有方法解决,就是数组的元素再存储一个数组,这样就实现了二维数组了

    //用这种方式创建数组,一维的大小是必须声明的
    int[][] arr = new int[10][];
    
    //不规则二维数组
    int[][] arr = new int[2][]
    arr[0] = new int[10];
    arr[1] = new int[5];
    
    

    获取长度

    int[][] arr = new int[5][10];
    System.out.println(arr.length);
    System.out.println(arr[0].length);
    

    数组的反转

    for(int i = 0; i < arr.length/2; i++){
        int temp = arr[i];
        arr[i] = arr[arr.length-1-i];
        arr[arr.length-1-i] = temp;
    }
    

    数组的引用传递

    ​ 网图侵删


    Arrays工具类

    其中包含了已经实现了的数组各种操作,里面都是静态方法,可以直接调用

    常用方法

    返回值 函数名 解释
    List asList(T... a) 返回(固定大小)的集合
    int binarySearch(T [] a, T key) 前提已排序,二分搜索,返回下标,否则负数
    T [] copyOf(T [] original, int newLength) 复制数组,截断或填充空字符
    T [] copyOfRange(T [] original, int from,int to) 复制数组,from to
    boolean equals(T [] a, T [] a2) 判断数组是否相等
    void fill(T [] a, T val) 将char值分配给char数组的每个元素
    void sort(T [] a) 给数组排序
    String toString(T [] a) 返回字符串

    这里要注意:Arrays.asList返回的是Arrays内部的集合,继承自AbstractList,没有真正实现集合功能,即不能改变其结构,若要将数组转为真集合可以使用:List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3));


    数组实现栈

    public class ArrayStack {
    	
    	private int[] values;	//存放元素
    	private int capacity;	//容量
    	private int size;		//元素数量
    	private static final int FACTOR = 2;	//影响因子
    	
    	//默认创造10大小
    	public ArrayStack() {
    		this.capacity = 10;
    		this.size = 0;
    		this.values = new int[capacity];
    	}
    
    	//指定栈大小
    	public ArrayStack(int initCapacity) {
    		if (initCapacity < 1){
    			throw new RuntimeException("Capacity Illegal");
    		}
    		this.capacity = initCapacity;
    		this.size = 0;
    		this.values = new int[initCapacity];
    	}
    	
    	//扩容2倍
    	private void ensureCapacity(){
    		capacity = capacity * FACTOR;
    		this.values = Arrays.copyOf(values, capacity);
    	}
    	
    	//入栈
    	public void push(int value){
    		if (size == capacity){
    			ensureCapacity();
    		}
    		values[size++] = value;
    	}
    	
    	//出栈
    	public int pop(){
    		if (size-- < 0){
    			throw new RuntimeException("Stack is empty");
    		}
    		return values[size];
    	}
    	
    	//返回栈顶元素
    	public int peek(){
    		if (size == 0){
    			throw new RuntimeException("Stack is empty");
    		}
    		return values[size-1];
    	}
    	
    	//判断是否为空
    	public boolean empty(){
    		return size == 0;
    	}
    	
    	//返回个数
    	public int size(){
    		return size;
    	}
    }
    

    测试与输出

    public static void main(String[] args) {
    	
    	ArrayStack arrayStack = new ArrayStack();
    	
    	System.out.println(arrayStack.size());
    	
    	arrayStack.push(1);
    	arrayStack.push(2);
    	arrayStack.push(3);
    	arrayStack.push(4);
    	arrayStack.push(5);
    	arrayStack.push(6);
    	arrayStack.push(7);
    	arrayStack.push(8);
    	arrayStack.push(9);
    	arrayStack.push(10);
    	arrayStack.push(11);
    	
    	System.out.println(arrayStack.size());
    	System.out.println(arrayStack.empty());
    	System.out.println(arrayStack.pop());
    	System.out.println(arrayStack.peek());
    	
    }
    
    0
    11
    false
    11
    10
    


    数组实现队列

    public class ArrayQueue {
    	
    	private int[] values;	//存放元素
    	private int capacity;	//容量大小
    	private int size;		//元素数量
    	private int head;		//记录头
    	private int tail;		//记录尾
    	
    	//默认构造
    	public ArrayQueue() {
    		this.capacity = 10;
    		this.size = 0;
    		this.head = 0;
    		this.tail = 0;
    		this.values = new int[capacity];
    	}
    
    	//指定大小
    	public ArrayQueue(int initCapacity) {
    		if (initCapacity < 1){
    			throw new RuntimeException("Capacity Illegal");
    		}
    		this.capacity = initCapacity;
    		this.size = 0;
    		this.head = -1;
    		this.tail = -1;
    		this.values = new int[capacity];
    	}
    	
    	//进队
    	public void enQueue(int value){
    		if (size >= capacity){
    			throw new RuntimeException("Queue is full");
    		}
    		values[tail++] = value;
    		size++;
    	}
    	
    	//出队
    	public int deQueue(){
    		size--;
    		if (size < 0){
    			throw new RuntimeException("Queue is empty");
    		}
    		return values[head++];
    	}
    	
    	//是否为空
    	public boolean empty(){
    		return size == 0;
    	}
    	
    	//返回个数
    	public int size(){
    		return size;
    	}
    }
    

    测试与输出

    public static void main(String[] args) {
    
    	ArrayQueue arrayQueue = new ArrayQueue();
    		
    	arrayQueue.enQueue(1);
    	arrayQueue.enQueue(2);
    	arrayQueue.enQueue(3);
    	arrayQueue.enQueue(4);
    	arrayQueue.enQueue(5);
    	arrayQueue.enQueue(6);
    	arrayQueue.enQueue(7);
    	arrayQueue.enQueue(8);
    	arrayQueue.enQueue(9);
    	arrayQueue.enQueue(10);
    
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println("队列大小: " + arrayQueue.size());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.deQueue());
    	System.out.println(arrayQueue.empty());
    }
    
    1
    2
    3
    4
    5
    6
    队列大小: 4
    7
    8
    9
    10
    true
    


  • 相关阅读:
    DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法
    DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week1深度学习的实用层面
    通俗理解决策树中的熵&条件熵&信息增益
    KNN实现手写数字识别
    softmax分类算法原理(用python实现)
    DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络
    博客园自定义皮肤扁平化设计
    神经网络权重初始化问题
    OpenVirteX 安装
    从个人的角度谈谈本次GNTC大会的收获
  • 原文地址:https://www.cnblogs.com/Howlet/p/12115625.html
Copyright © 2020-2023  润新知