点击进入我的博客
1 数组概述
数组相对其他容器的优点
- 数组是效率最高的存储和随机访问对象引用序列的方式。
- 数组可以保存基本类型
- 数组可以真正持有某种具体类型
数组是第一级对象
- 数组标识符只是一个引用,指向堆中的一个真实对象
- length是数组对象的一部分
-
[]
是访问数组对象的唯一方式 - 数组中的对象会被默认初始化为
null
,值会被初始化为0
返回数组
Java中可以使用数组作为返回值
多维数组
- 多维数组必须指定第一维的长度,其他维度可以指定也可以不指定
- 多维数组除第一维之外,其他维度可以有不同的任意长度
2 数组与范型
- 不能实例化具有参数类型的数组
- 可以参数化数组本身的类型
- 可以创建范型数组的引用
- 可以把普通数组转型成范型数组
public class Main {
public static void main(String[] args) {
A<String>[] arr1 = new A<String>[10]; // (1)error
A<String>[] arr2; // (3)warning
A<String>[] arr3 = (A<String>[]) new A[10]; // (4)
}
}
class A<T> {
// (2)
T[] func() {
return (T[]) new Object()[];
}
}
范型容器是比范型数组更好的选择
3 Arrays类的功能
-
Arrays.fill()
:把全部或部分数组填充为某一个固定值 -
Arrays.equals()
和Arrays.deepEquals()
:比较数组是否相等。数组相等的条件是数组长度相等,而且对应位置的元素也相等。 -
Arrays.copy()
:底层调用的是System.arraycopy
,用于复制数组,效率比for循环快的多。如果复制的内容是对象,那么只是复制了对象的引用(浅复制)。 -
Arrays.binarySearch()
:对已排序的数组进行二分查找,如果数组未排序可能会无限循环。 -
Arrays.sort()
:对数组中元素进行排序,只要数组中的元素实现了Comparable接口,或者提供一个Comparator。字符串的排序按照字典序进行排序,可以使用String.CASE_INSENSITIVE_ORDER
来忽略大小写。
public class Main {
public static void main(String[] args) {
Item[] arr = {new Item(3), new Item(5), new Item(4)};
System.out.println(Arrays.toString(arr)); // [3, 5, 4]
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [3, 4, 5]
Arrays.sort(arr, new Comparator<Item>() {
public int compare(Item o1, Item o2) {
return o1.value == o2.value ? 0 : (o1.value > o2.value ? -1 : 1);
}
});
System.out.println(Arrays.toString(arr)); // [5, 4, 3]
}
}
class Item implements Comparable<Item> {
public int value;
public Item(int value) {
this.value = value;
}
@Override
public String toString() {
return value + "";
}
public int compareTo(Item o) {
return value == o.value ? 0 : (value > o.value ? 1 : -1);
}
}
网友评论