Collections
排序操作
对于sort的说明:我们希望按照字符串的长度大小排序。可以传入一个比较器。
Collections.sort(list, new Comparator(){
@Override
public int compare(Object o1,Object o2) {
//可以加入校验代码
return ((String)o1).length() - ((String)o2).length();
}
});
lambda表达式对sort的简化
注意点和Arrays.sort的方法相同,也是要明确好类型,否则报错。
查找、替换
说明
- Collections.max()里是可以加入比较器的
- copy方法如果dest集合size小于src的size,会报错。
- 为了完成一个完整拷贝,我们需要先给dest 赋值,大小和list.size()一样
Arrays
sort说明
- 因为数组是引用类型,所以通过sort排序后,会直接影响到实参arr
- 可以传入一个比较器来实现订制排序
- 调用定制排序时,传入两个参数(1)排序的数组arr
- (2)实现了Comparator接口的匿名内部类,要求实现compare方法
- Arrays.sort(arr);//默认排序方法
- //定制排序
Arrays.sort(arr, new Comparator() {
@0verride
public int compare(Object o1,Object o2){
Integer i1 = (Integer)o1;
Integer i2 = (Integer)o2;
return i2 - i1;
}
});
lambda表达式对sort的简化
力扣题179、最大数
当时看到这个题目,用的lambda表达式对sort的比较器简化了一下,所以就顺便记下。记住以下的要点
- 这里放入的必须是类,如果是基本类型,则需要其对应的包装类
- 参数只要写参数名就行了。
再看原本的sort方法,lambda表达式简化了太多东西!实在好用。
binarySearch说明
- binarySearch通过二分搜索法进行查找,要求必须排好。如果是无序的,不能使用此方法
- 如果数组中不存在该元素,就返回负数return -(low + 1); // key not found。low代表应该存在的位置
Integer[] arr = {1,2,90,123,567};
int index = Arrays.binarySearch(arr,92);
System.out.println( "index=" + index);
//比如这里,92>90,92应该是在下标为3,但返回-(3+1)
copyOf说明
- 从arr数组中,拷贝arr.length个元素到newArr数组中
Integer[] newArr = Arrays.copy0f(arr,arr.length)
- 如果拷贝的长度> arr.length 就在新数组的后面增加null
- 如果铂贝长度<0就抛出异常NegativeArraySizeException
- 该方法的底层使用的是System.arraycopy()
fill、equals说明
fill(arr,num)
数组的填充
Integer[] num = new Integer[]{9,3,2};
//使用99去填充 num数组,可以理解成是替换原理的元素
Arrays.fill(num,99);
System.out.println("==num数组填充后==");
System.out.println(Arrays.toString(num));
//输出为[99,99,99]
equals(arr1,arr2)
比较两个数组元素内容是否完全一致。一样则返回true- 其中的一样代表的是元素顺序、数量必须完全一致。
asList说明
asList(arr)
将一组值,转化为list- 返回的asList编译类型 List(接口)
- asList运行类型java.util.Arrays#fArrayList,是Arrays类的静态内部类private static class ArrayList extends AbstractList implements RandomAccess,java.io.Serializable
int[]arr1=new int[] {1,2,3,4,5,5,6};
Integer[]arr2=new Integer[] {1,2,3,4,5,5,6};
System.out.println(Arrays.asList(arr1));
System.out.println(Arrays.asList(arr1).getClass());
System.out.println(Arrays.asList(arr2));
System.out.println(Arrays.asList(arr2).getClass());
所以这里一般不要用int型转换集合,要用其包装类,其余基本数据类型也是如此
注意事项
- 如果将数组转化成集合,那么这个集合是不能进行修改的,比如add、remove,但是排序还是可以的,比如用
Collections.sort()
public static void main(String[] args) {
Integer[]arr2=new Integer[] {1,2,3,4,5,5,6};
List list=Arrays.asList(arr2);
System.out.println(list);
list.add(8);
list.remove(0);
System.out.println(list);
}
- 如果实在想对转化的集合操作的话,可以新建立一个集合。
public static void main(String[] args) {
Integer[]arr2=new Integer[] {1,5,3,4,5,5,6};
List list=Arrays.asList(arr2);
List list2=new ArrayList<>(list);
list2.add(8);
System.out.println(list);
System.out.println(list2);
}