python的堆操作
import heapq
def testHeapq():
q = [6, 3, 8, 4, 1]
heapq.heapify(q) # q = [1, 3, 8, 4, 6]
heapq.heappush(q,5) # q = [1, 3, 5, 4, 6, 8]
heapq.heappush(q,-2) # q = [-2, 3, 1, 4, 6, 8, 5]
heapq.heappop(q) # -2 q = [1, 3, 5, 4, 6, 8]
def heapHeapq():
dir(heapq)
# ['heapify', 'heappop', 'heappush', 'heappushpop',
# 'heapreplace', 'merge', 'nlargest', 'nsmallest']
java的堆操作
import java.util.PriorityQueue;
public class Test006 {
class Node implements Comparable<Node> {
int cnt, time;
public Node(int cnt, int time) {
this.cnt = cnt;
this.time = time;
}
@Override
public int compareTo(Node o) {
return cnt == o.cnt ? time - o.time : cnt - o.cnt;
}
@Override
public String toString() {
return "Node{" + "cnt=" + cnt + ", time=" + time + '}';
}
}
public void testPriorityQueue() {
PriorityQueue<Node> q = new PriorityQueue<>(10);
Node node = new Node(2, 3);
q.offer(node);
node = new Node(3, 3);
q.offer(node);
node = new Node(3, 2);
q.offer(node);
node = new Node(5, 3);
q.offer(node);
Node e = q.poll();
System.out.println(e);//Node{cnt=2, time=3}
e = q.peek();
System.out.println(e);//Node{cnt=3, time=2}
}
public static void main(String[] args) {
Test006 t = new Test006();
t.testPriorityQueue();
}
}
关于Comparator: Comparable:java.lang.Comparable理解为内部比较器 Comparator:java.util.Comparator是外部比较器,给Arrays.sort(arrayList, comparator)使用,有静态方法Comparator.naturalOrder()
public class Test006 {
public void testArray() {
class Person implements Comparable<Person> {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person o) {
return this.name.compareTo(o.name) != 0 ? this.name.compareTo(o.name) : this.age - o.age;
}
@Override
public String toString() {
return "Person{" + "name='" + name + ''' + ", age=" + age + '}';
}
}
class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.name.compareTo(o2.name) != 0 ? o1.name.compareTo(o2.name) : o1.age - o2.age;
}
}
List<Person> personList = new ArrayList<>();
personList.add(new Person("bb", 123));
personList.add(new Person("aa", 123));
Person[] persons = personList.toArray(new Person[0]);
System.out.println(Arrays.toString(persons));
//[Person{name='bb', age=123}, Person{name='aa', age=123}]
Arrays.sort(persons, new PersonComparator());
System.out.println(Arrays.toString(persons));
//[Person{name='aa', age=123}, Person{name='bb', age=123}]
}
}