java課堂筆記------Map,隊列,棧

來源:互聯網
上載者:User

標籤:查看   style   地方   出棧   實現   contains   override   遍曆   nta   

 * java.util.Map * Map看起來像是一個多行兩列的表格 * 每條記錄分為兩部分:key,value * 其中在一個Map中key是不允許重複的。(equals比較) *  * 常用的實作類別:java.util.HashMap(散列演算法實現) * TreeMap(二叉樹實現)          Map<String,Integer> map            = new HashMap<String,Integer>();                         * V put(K k,V v)         * 將給定的key與value存入到Map中。         * 由於Map中key不允許重複,所以會出現兩種情況:         * 1:存入的key在Map中還不存在,那麼直接將這對         *   key-value存入Map,傳回值為NULL         * 2:存入的key在Map中已經存在,那麼會將對應的         *   value替換原來這個key對應的value,並將被         *   替換的value值返回。                   map.put("語文", 98);        map.put("數學", 97);        map.put("英語", 95);        map.put("物理", 92);        map.put("化學", 96);         * 存入順序與內部順序不一致      map.put("化學", 99);                     * V get(K k)         * 根據給定的key去擷取對應的value         * 若當前Map中不含有給定的key,則傳回值為NULL         Integer num = map.get("數學");                         * V remove(K k)         * 將給定的key對應的這一對內容從Map中刪除         * 並將對應的value返回。          num = map.remove("化學");         System.out.println("刪除的value:"+num);                         * boolean containsKey(K k)         * 查看當前Map是否包含給定的key         * 包含的判斷是依據key的equals比較的結果        boolean containsKey = map.containsKey("語文");         * 遍曆Map * 遍曆Map有三種方式: * 1:遍曆所有的key * 2:遍曆每一組索引值對 * 3:遍曆所有的value(相對不常用)         * LinkedHashMap         * 內部使用一個LinkedList維護順序,可以做到         * 遍曆的時候與put的順序一致。若不需要順序,         * 通常不使用該類。                      *  遍曆所有的key:         *  Set<K> keySet()         *  該方法會將所有的key存入一個Set集合後返回,所以遍曆該集合就相當於遍曆到所有的key了        Set<String> keySet = map.keySet();        for(String key : keySet){            System.out.println("key:"+key);        }                         * 遍曆每一組索引值對         * Set<Entry> entrySet()         * Entry是Map的內部類,每一個執行個體表示一組索引值對         * 其中包含兩個屬性,key,value.         * 將每一組索引值對(Entry執行個體)存入一個Set集合後         * 將其返回。                 Set<Entry<String,Integer>> entrySet = map.entrySet();        for(Entry<String,Integer> e:entrySet){            String key = e.getKey();            Integer value = e.getValue();            System.out.println(key+":"+value);        }                         * Collection<V> values()         * 將當前Map中所有的value值存入一個集合後返回                 Collection<Integer> values = map.values();        for(Integer value : values){            System.out.println("value:"+value);        }                                                                 * 該類用於練習重寫equals與hashcode的注意事項 * 當我們使用自訂類型的執行個體作為HashMap中key的值 * 時,這個類的equals與hashcode的結果直接影響著 * HashMap查詢的效率 * 要避免一件事的產生: * hashcode值一樣,但是equals比較不為true!這會 * 嚴重影響HashMap效率 * JAVA API文檔中對於兩個方法的重寫有著要求: * 當我們重寫一個類的equals方法時就應當連同重寫 * hashcode方法。 * 還應同時滿足: * 當兩個對象equals比較為true時,hashcode返回的 * 值應當相等。反過來不強制,但最好也不同,否則影響 * HashMap效能。 * hashcode方法返回的應該是一個穩定的值,意思是說: * 當確定equals方法比較結果的屬性值沒有發生改變的 * 前提下,多次調用hashcode方法返回的值應當相同。 *  public class Cell {    private int row;    private int col;    public Cell(int row, int col) {        super();        this.row = row;        this.col = col;    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + col;        result = prime * result + row;        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Cell other = (Cell) obj;        if (col != other.col)            return false;        if (row != other.row)            return false;        return true;    }        }         * 隊列 * 儲存一組元素,但是對於存取有要求,必須遵循先進先出原則        Queue<String> queue = new LinkedList<String>();                 * boolean offer(E e)         * 向隊列末尾追加一個元素        queue.offer("one");        queue.offer("two");        queue.offer("three");        queue.offer("four");                                 * E poll()         * 從隊首擷取元素。注意,擷取後該元素就從         * 隊列中被移除了!出隊操作         String str = queue.poll();        System.out.println(str);         * E peek()         * 同樣可以擷取隊首元素,但是與poll不同的是         * 並不會將該元素從隊列中刪除。        str = queue.peek();        System.out.println(str); * 棧:儲存一組元素,存取必須遵循先進後出原則 * 通常用來實現具有"後退"功能的地方。          * Deque是Queue的子介面。         * 雙端隊列的特點是,隊列的兩端都可以進出元素。         * 若我們只調用一側的進出方法,就形成了棧結構                 Deque<String> stack = new LinkedList<String>();                 * void push(E e)         * 將元素"壓入"棧中,入棧操作。新入棧的元素         * 會在棧頂(棧中第一個元素)                 stack.push("one");        stack.push("two");        stack.push("three");        stack.push("four");                 * E pop()         * 出棧操作,擷取棧頂元素,擷取後該元素         * 就從棧中被刪除了                 String str = stack.pop();        System.out.println(str);         * 同樣可以使用peek引用棧頂元素,而不做出棧操作        str = stack.peek();        System.out.println(str);        

 

java課堂筆記------Map,隊列,棧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.