目录
Arrays类:
Arrays 类是 java 针对数组进行操作的工具类,提供了排序、排序等功能。 ------------------ java.util 包
相比集合专门存储对象,数组既可以存储基本数据类型,也可以存储引用数据类型。
成员方法:
public static <T> List<T> asList(T ... a):返回一个受指定数组支持的固定大小的列表(与Collections连接的桥梁),只读。一般通过重新实例化 new ArrayList(list) 将其转为可写的集合。
public static String toString(int[] a):得到数组的字符串形式 [数组的元素1,2,3,4]
public static void sort(int[] a):排序(默认升序)
public static int binarySearch(int[] a,int key) :二分查找(只支持升序的数组)
public static void sort(int[] a,Comparator<? super T> c): 通过重写public int compare(T o1, T o2)方法,实现自定义排序顺序。
public static String toString(int[] a):将数组转成字符串便于输出,支持所有基本数据类型的数组,还有Object[ ]。
注:更多方法详见API文档。
ArrayUtil为自定义的工具类:
================================================================
public class ArrayDemo04 {
public static void main(String[] args) {
int[] arr = {1,2,5,6,3,8,25};
ArrayUtil.printArray(arr); //[1,2,5,6,3,8,25]
String str = Arrays.toString(arr);
System.out.println(str); //[1, 2, 5, 6, 3, 8, 25]
Arrays.sort(arr); //排序:默认是升序
ArrayUtil.printArray(arr); //[1,2,3,5,6,8,25]
int index = Arrays.binarySearch(arr, 6);
System.out.println(index); //4
ArrayUtil.reverse(arr); //将升序数组转为降序数组
ArrayUtil.printArray(arr); //[25,8,6,5,3,2,1]
index = Arrays.binarySearch(arr, 6); //二分查找:只支持升序的数组,对于降序数组不适用
System.out.println(index); //-8
}
}
public class Demo7 {
public static void main(String[] args) {
Person[] p = new Person[] {new Person("张",18),new Person("里",25)};
System.out.println(p[1]);
Integer[] arr = {5,6,2,3,8,4};
Arrays.sort(arr, new Comparator<Integer>(){ //泛型不能是int[]的
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2-o1;
}
});
String str = Arrays.toString(arr);
System.out.println(str);
}
}
public class Demo1 {
public static void main(String[] args) {
Person01[] p = {new Person01("zk",18),new Person01("ls",20),new Person01("hs",19)};
Arrays.sort(p, new Comparator<Person01>() {
@Override
public int compare(Person01 o1, Person01 o2) {
return o1.getAge() - o2.getAge();
}
});
for (Person01 person : p) {
System.out.println(person);
}
}
}
class Person01{
String name;
int age;
public Person01() {}
public Person01(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
源码分析:
List<T> list = Arrays.asList(T ... a) : 返回一个只读的列表集合
由下面可以看出:该list集合底层使用E[ ]存储,并且被 final 修饰,表示长度,属性值不可更改。即只有可读属性。要想对其操作可以使用 new ArrayList(Collection<T> c) 方法返回一个ArrayList类型的对象。这是因为ArrayList使用Object[ ]类型的elementData,size记录元素个数,length表示数组长度,二者不相等。数组没有使用final修饰。
位于Arrays.class中
=================================================
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
上面的ArrayList位于Arrays$ArraysList.class中,$表示内部类
========================================================
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}