java算法常用


PriorityQueue

与普通队列不同,优先队列元素是按排序顺序检索的。

假设我们想以升序检索元素。在这种情况下,优先队列的头是最小的元素。检索到该元素后,下一个最小的元素将成为队列的头。

PriorityQueue<Integer> numbers = new PriorityQueue<>();

这里,我们创建了一个没有任何参数的优先级队列。在这种情况下,优先级队列的头是队列中最小的元素。元素将按升序从队列中移除。

comparator

 import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {

        //创建优先级队列
        PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator());
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        numbers.add(3);
        System.out.print("PriorityQueue: " + numbers);
    }
}

class CustomComparator implements Comparator<Integer> {

    @Override
    public int compare(Integer number1, Integer number2) {
        int value =  number1.compareTo(number2);
        //元素以相反的顺序排序
        if (value > 0) {
            return -1;
        }
        else if (value < 0) {
            return 1;
        }
        else {
            return 0;
        }
    }
}

在以上所有示例中,优先级队列元素都是按自然顺序(升序)检索的。 但是,我们可以自定义此顺序。

为此,我们需要创建自己的comparator类,它实现了Comparator接口。

如果你是直接想创建大顶堆,就是直接比较存入的数据的大小,那么这样写就行,大顶堆就是后面减前面的

PriorityQueue<Integer>pq=new PriorityQueue<>((o1,o2)->o2.compareTo(o1));

如果你想以别的,比如这个key在map里对应的value的大小,然后建立大顶堆,那么应该重写compare

PriorityQueue<Integer>pq=new PriorityQueue<>(new Comparator<Integer>(){
    public int compare(Integer a,Integer b)
    {
        return map.get(b)-map.get(a);
    }
});

List<int[]>

刷力扣遇到了这种用法,

List<int[]> list = new ArrayList<int[]>(); 
list.add(new int[]{1,2,3}); 
list.add(new int[]{4,5}); 

是一个列表,其中每个元素都是一个int类型的数组,这个列表可以用来存储一组整数数组,每个数组可以有不同的长度和元素。

转成int[][][][][][][] [],因为有的傻逼题目会要你写成int [] [] 返回

list.toArray(new int[list.size()][]);

Arrays.asList()

把数组转成List

String[] myArray = { "Apple", "Banana", "Orange" }List<String> myList = Arrays.asList(myArray);
//上面两个语句等价于下面一条语句
List<String> myList = Arrays.asList("Apple","Banana", "Orange");

Arrays.sort

重写排序规则

Arrays.sort(nums,new Comparator<String>(){
            public int  compare(String s1,String s2)
            {
                return (s1+s2).compareTo(s2+s1);//升序就是前面比后面
            }
        });

用到了的题目:把数组排成最小的数_牛客题霸_牛客网 (nowcoder.com)


  目录