数组类型
-
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
在多个线程上并行执行,适用于大型数组或计算密集型的赋值操作。