经验:尽量用 Comparator,不要用 Comparable。

Comparator class 标准写法:

Queue<ListNode> heap = new PriorityQueue(size, new NodeComparator());

class NodeComparator implements Comparator<ListNode> {
    public int compare(ListNode n1, ListNode n2) {
        return n1.val - n2.val;
    }
}

Comparator inline 简化写法:

Collections.sort(freq, new Comparator<int[]>() {
	public int compare(int[] keyValue1, int[] keyValue2) {
		return keyValue1[1] - keyValue2[1];
	}
});

PriorityQueue inline 简化写法 :

(这种写法只对 primitive type,比如 integer array,注意尽量少这么写!)

PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {
	public int compare(int[] m, int[] n) {
		return m[1] - n[1];
	}
});

class implements Comparable<> 写法:

class TeamVotes implements Comparable<TeamVotes> {
    char team;

    public int compareTo(TeamVotes tv) {
        return this.team - tv.team;
    }
}

Iterate a Map:

Map<Integer, Integer> group = new HashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : group.entrySet()) {
	int a = entry.getKey();
	int b = entry.getValue();
	int keyValue = {entry.getKey(), entry.getValue()};
}

Iterate a Map(简易版):

Map<String, Object> map = ...;
for (String key : map.keySet()) {
	key;
}

Iterate a HashSet:

HashSet<String> set = new HashSet<>();

// Iterate throw a simple for loop
for (String ele : set) {
	// Print HashSet data
	System.out.print(ele + " ");
}

Or, using a Iterator:

Iterator<String> itr = set.iterator();
while (itr.hasNext()) {
   System.out.println(itr.next());
}

Java Enum:

enum NodeType {
    OPERAND,    // 操作数
    ADD,        // 加
    SUBTRACT,   // 减
    MULTIPLY,   // 乘
    DIVIDE      // 除
}

switch (this.nodeType) {
    case OPERAND:
        return this.number;
    case ADD:
        return left.evaluate() + right.evaluate();
    case SUBTRACT:
        return left.evaluate() - right.evaluate();
    case MULTIPLY:
        return left.evaluate() * right.evaluate();
    case DIVIDE:
        return left.evaluate() / right.evaluate();
    default:
        throw new AssertionError();
}