数组


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


// 字节/字符 数组转成字符串
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


原文地址:https://www.cnblogs.com/Howlet/p/12115625.html