数组类型
-
Java 的数组总是会被自动初始化,并且无法越界访问和(会进行检查),比如对于一个对象的(引用)数组会被全部初始化为 null
-
初始化:为数组开辟空间
- 静态初始化
new int[]{ 1,2,3 };简化int[] array= { 1,2,3 }; - 动态初始化
new int[n] Integer[]a={1,2,3}完整的写法Integer[]a=new Integer[]{1,2,3}-
int[][] ranks = new int[totalElements][]; -
非基本类型引用数组
- 创建的数组每一项引用 null
-
还需要对每一项进行初始化
//引用全部初始化为 null(基本数据类型为 0) Object [] b = new Object [5]; //对数组的每一项及逆行初始化 Object [] c = {new Object(), new Object()}; -
不能实例化参数化类型数组 ^1f44a2
- 只能先创建Object数组再进行强制类型转换
- 注意强制转型要使用
@SuppressWarnings("unchecked") -
也可以使用Class创建出具有精确数据类型的数组,这样最终转化为T类型的数组更为安全
private T [] array; @SuppressWarnings("unchecked") public GenericArrayWithTypeToken(Class <T> type, int sz) { array = (T [])Array.newInstance(type, sz); } -
集合类型支持这个功能
List<Peel<Banana>> peels = new ArrayList<Peel<Banana>>(10);
- 可以先创建无参数list再强制转型
Peel<?>[] peels = new Peel<?>[10]; // 创建一个通配符类型的数组 Peel<Banana>[] bananaPeels = (Peel<Banana>[]) peels; // 转型
Arrays工具类¶
sort:对数组进行排序。- 要求被排序对现象实现Comparable接口(含compareTo)
@Override public int compareTo(CompType rv) { return (i < rv.i ? -1 : (i == rv.i ? 0 : 1)); } - 颠倒排序
Arrays.sort(arr,Collections.reverseOrder()) -
也可以传入自定义的Comparator
class CompTypeComparator implements Comparator <CompType> { public int compare(CompType o1, CompType o2) { return (o1.j < o2.j ? -1 : (o1.j == o2.j ? 0 : 1)); } } Arrays.sort(a, new CompTypeComparator()); -
binarySearch:在已排序的数组中进行二分搜索。 - 如果没有找到会返回负数,表示
-(insertion point -1)即应该插入的位置(比目标值大的第一个元素的索引值) - 可以传入Comparator
Arrays.binarySearch(arr,n)toString:生成数组内容的字符串表示。deepToString生成多维数组的表示asList:将数组转换为List。copyOf(arr,len,[target.class])按新的长度创建已有数组的副本(深拷贝)copyOfRange(arr,from,to,[target.class])对指定范围创建副本equals(a,b)用于比较两个对象是否在概念上相等。其默认行为是比较对象引用,但通常被重写以比较对象的内部状态。deepEquals用于深度(递归)比较两个对象。它特别适用于比较数组或复杂的嵌套对象,可以递归地比较对象的内部元素。(可以用与多维数组)Arrays.deepToString(list)用于对数组打印输出Arrays.fill(arr,[from,to],content)对数组进行填充Arrays.setAll(arr,lambda)可以通过下标填充数组生成元素Arrays.setAll(ia, n -> n); Arrays.setAll(ca, SimpleSetAll:: getChar);- 除了初始化也可以用于对数组的每个元素进行一定的操作和修改
- 并行版本
parallelSetAll在多个线程上并行执行,适用于大型数组或计算密集型的赋值操作。