1. 程式人生 > >JAVA的Collections類

JAVA的Collections類

1.shuffle的用法

就是隨機打亂原來的順序,和洗牌一樣。有人戲稱轉為打麻將設計的,如:

// ShuffleTest.java  
  
import java.util.*;  
  
public class ShuffleTest {  
    public static void main(String[] args) {  
        List<Integer> list = new ArrayList<Integer>();  
        for (int i = 0; i < 10; i++)  
            list.add(new Integer(i));  
        System.out.println("打亂前:");  
        System.out.println(list);  
  
        for (int i = 0; i < 5; i++) {  
            System.out.println("第" + i + "次打亂:");  
            Collections.shuffle(list);  
            System.out.println(list);  
        }  
    }  
} 

2.Queue中 add/offer,element/peek,remove/poll區別

1、add()和offer()區別:

add()和offer()都是向佇列中新增一個元素。一些佇列有大小限制,因此如果想在一個滿的佇列中加入一個新項,呼叫 add() 方法就會丟擲一個 unchecked 異常,而呼叫 offer() 方法會返回 false。因此就可以在程式中進行有效的判斷!

 2、poll()和remove()區別:

remove() 和 poll() 方法都是從佇列中刪除第一個元素。如果佇列元素為空,呼叫remove() 的行為與 Collection 介面的版本相似會丟擲異常,但是新的 poll() 方法在用空集合呼叫時只是返回 null。因此新的方法更適合容易出現異常條件的情況。

3、element() 和 peek() 區別:

element() 和 peek() 用於在佇列的頭部查詢元素。與 remove() 方法類似,在佇列為空時, element() 丟擲一個異常,而 peek() 返回 null。

正兒八經的用法,我來設計一個權重:

/**
     * 選取一個合適的address,可以隨機獲取等,內部可以使用合適的演算法.
     *
     * @return
     */
    InetSocketAddress selector();

---------------
  // 用來儲存當前provider所接觸過的地址記錄,當zookeeper叢集故障時,可以使用trace中地址,作為"備份"
    private Set<String> trace = new HashSet<String>();
    private final List<InetSocketAddress> container = new ArrayList<InetSocketAddress>();
    private Queue<InetSocketAddress> inner = new LinkedList<InetSocketAddress>();

    @Override
    public InetSocketAddress selector() {
        if (inner.isEmpty()) {
            if (!container.isEmpty()) {
                inner.addAll(container);
            } else if (!trace.isEmpty()) {
                synchronized (lock) {
                    for (String hostname : trace) {
                        container.addAll(transfer(hostname));
                    }
                    Collections.shuffle(container);
                    inner.addAll(container);
                }
            }
        }
        return inner.poll();
    }

-----

更多關於Java的程式碼講解:https://github.com/singgel/Java-algorithms/tree/master/src/test/java/com/hks/eightsortingalgorithms