一、ArrayList
定义ArrayList arrayList = new ArrayList();
【第一个坑:最后一个是arrayList .size()-1】
arrayList .remove()里面的参数,可以是要操作的数组里面的某个元素,也可以代表是数组的第几个元素,默认从0开始,最后一个是arrayList .size()-1
【第二个坑:元素还是索引】
我定义的是整数型数组,于是传进remove里面的参数是要指数组的元素还是指数组的第几个(数组的索引),有时就容易混在一起了
填坑2:直接放值默认是索引,就是第几个;如果要remove掉特定的值,要在值前面加上(Object)进行强制转换!!!
二、基于优先队列实现的最大最小堆
求数组的最大/小K个数字
public static ArrayList<Integer> Fun(int [] input, int k){
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//基于堆排序的优先队列实现
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(k, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//return o1.compareTo(o2);//最大堆
return o2.compareTo(o1);//最小堆
}
});
for(int i = 0; i < input.length;i++){
if(queue.size() < k){
queue.offer(input[i]);
}else{
if(queue.peek() > input[i]){
int num = queue.poll();//最小堆先推出来的是大的数
queue.offer(input[i]);
}
}
}
while(!queue.isEmpty()){
arrayList.add(queue.poll());
}
Collections.sort(arrayList);
return arrayList;
}