1.当用一个list作操作,然后一个List<List<Integer>> res 将这个list的内容添加进去,但是之后这个list还要变,(List存放的是引用,如果list变了,那么res里的元素也变了)该怎么办呢?
解决办法当然不是新生成一个list2,循环让其元素等于list,这也太麻烦了;而是res.add(new ArrayLIst<Integer>(list)),这应 该是深拷贝吧
2.Arrays.sort(a); 给数组排序
Collection.sort(b); 给list排序
Arrays几个排序方法:
Arrays.sort(基本数据类型数组):从小到大排序 为串行排序
Arrays.sort(基本类型数组,fromindex,toindex);toindex不被包括,所以要取nums.length
Arrays.sort(引用类型数组,new Comparator<T>(){ }):给引用类型排序,自定义比较器,所以可以实现根据任意属性排序,从小到大或从大到小排序(基本数据类型是不行的)
Arrays.sort(引用类型数组,fromindex,toindex,new Comparator<T>(){ })
Arrays.parallerSort() java8新增的并行排序算法,基于fork/join框架。
Arrays只有这几种排序方法,没有其他类型的 例如Arrays.sort(int[] nums,Collections.reverseOrder());这个是不存在的,不能将基本数据类型数组降序
Arrays.sort()还能指定排序顺序:
如
int [][]work=new int[m][2];
//二维数组可以看成多个一维数组组成
Arrays.sort(work,new Comparator<int[]>(){//按工作难度来排序
@Override
public int compare(int[] num1,int []num2){
return num1[0]-num2[0];
}
});
或者
Arrays.sort(works, Comparator.comparingInt(a -> a[0]));
或者是编写一个类Work,两个属性,一个是difficuilt,一个是salary,然后建立一个一维的Work数组,再用Arrays依据salary对Work数组排序
collection.sort(集合),要求集合的内容类必须实现Comparable接口,重写compareto方法。
3.只要是排过序的顺序存储结构(当然包括数组),都可以通过二分法提高查找速度
4.map的几个函数:
map.floorKey( ) :Returns the greatest key less than or equal to the given key, or null
if there is no such key.
map.floorEntry():Returns a key-value mapping associated with the least key in this map, or null
if the map is empty.
map.getOrDefalut(Object key, defaultvalue):如果有key对应值,就返回对应值;如果没有就返回defalltvalue;
5.Arrays.asList() 不建议基本类型数组使用 详见Java Arrays.asList注意事项
Integer[] datas = new Integer[]{1,2,3,4,5};
ArrayList<Integer> arrayList = new ArrayList<>(Arrays.asList(datas));
技巧:
1.编程题要善用三目运算符,可以减少if的编写,特别是有多个if时会很好的替代(动态规划题判断是否已经算过时就可以使用)