Map和Collection詳解

Collection
    -----List
               -----LinkedList    非同步
                ----ArrayList      非同步,實現了可變大小的元素數組
                ----Vector          同步
                         ------Stack
    -----Set   不容許有相同的元素


Map
    -----HashTable        同步,實現一個key--value映射的哈希表
    -----HashMap          非同步,
    -----WeakHashMap   改進的HashMap,實現了「弱引用」,若是一個key不被引用,則被GC回收
 
 

Collection


    在咱們編程的時候,有時候須要集中存放多個數據,能夠用數組來保存多個數據,可是數組的長度是不可變的,一旦數組的長度肯定了以後就沒法再改變,若是要保存可變長度的數據的話,數組確定是不行的了。並且數組也沒法保存具備必定關聯的數據,好比:數學–80,英語–50。爲了能夠保存上面的這些信息,java提供了集合類,主要是負責保存、盛裝數據的。所以集合至關於一個容器類。
    集合類有兩個派生類,CollectionMap,本篇文章主要講解Collection接口
這裏寫圖片描述java

package java.util;

public interface Collection<E> extends Iterable<E> { // Query Operations //查詢的一些方法 int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray(); <T> T[] toArray(T[] a); // Modification Operations //修改的一些方法 boolean add(E e); boolean remove(Object o); // Bulk Operations //一些批量操做的方法 boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); // Comparison and hashing //和hash對比 boolean equals(Object o); int hashCode();

    

List

    List的長度可變。
    List集合像一個數組,是有序的。編程

0 1 2 3 4 5 6
ele1 ele2 ele3 ele4 ele5 ele6 ele7

    
    List集合的一些基本操做數組

List<String> list = new ArrayList<String>(); list.add("testone"); list.add(「testtwo」); //List遍歷 //第一種:這種方式在循環執行過程當中會進行數據鎖定,性能稍差,同時,若是你想在尋歡過程當中去掉某個元素,只能調用it.remove方法,不能使list.remove方法,不然必定出現併發訪問的錯誤. for(Iterator<String> it = ist.iterator(); it.hasNext();) { .... } //第二種:內部調用第一種,換湯不換藥,所以比Iterator慢,這種循環方式還有其餘限制,不建議使用它。 for(String data:list) { ..... } //第三種:內部不鎖定,效率最高,可是當寫多線程時要考慮併發操做的問題。 for(int i=0;i<list.size();i++) { A a=list.get(i); ... } 

    

Set

    Set集合是無序的,元元素不容許重複。多線程

這裏寫圖片描述

HashSet h=new HashSet(); h.add("1st"); h.add("2nd"); h.add(new Integer(3)); h.add(new Double(4.0)); h.add("2nd"); //重複元素,未被添加 h.add(new Integer(3)); //重複元素,未被添加 h.add(new Date()); System.out.println("開始:size="+h.size()); Iterator it=h.iterator(); while(it.hasNext()) { Object o=it.next(); System.out.println(o); } h.remove("2nd"); System.out.println("移除元素後:size="+h.size()); System.out.println(h); 

    

Map


    Map是java集合的另外一個根接口,下圖中是Map體系中一些經常使用的實現類。併發

這裏寫圖片描述

    map也像一個罐子,不過在map中存儲的時候都是以鍵值對的方式存儲的(key-value方式)。存儲的時候,key值是不能重複的,至關於索引,而value值是能夠重複的。查詢value值時經過key進行查詢。性能

這裏寫圖片描述

package com.jackey.topic; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; //循環遍歷map的方法 public class CircleMap { public static void main(String[] args) { Map<String, Integer> tempMap = new HashMap<String, Integer>(); tempMap.put("a", 1); tempMap.put("b", 2); tempMap.put("c", 3); // JDK1.4中 // 遍歷方法一 hashmap entrySet() 遍歷 System.out.println("方法一"); Iterator it = tempMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); Object value = entry.getValue(); System.out.println("key=" + key + " value=" + value); } System.out.println(""); // JDK1.5中,應用新特性For-Each循環 // 遍歷方法二 System.out.println("方法二"); for (Map.Entry<String, Integer> entry : tempMap.entrySet()) { String key = entry.getKey().toString(); String value = entry.getValue().toString(); System.out.println("key=" + key + " value=" + value); } System.out.println(""); // 遍歷方法三 hashmap keySet() 遍歷 System.out.println("方法三"); for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) { Object obj = i.next(); System.out.println(obj);// 循環輸出key System.out.println("key=" + obj + " value=" + tempMap.get(obj)); } for (Iterator i = tempMap.values().iterator(); i.hasNext();) { Object obj = i.next(); System.out.println(obj);// 循環輸出value } System.out.println(""); // 遍歷方法四 treemap keySet()遍歷 System.out.println("方法四"); for (Object o : tempMap.keySet()) { System.out.println("key=" + o + " value=" + tempMap.get(o)); } System.out.println("11111"); // java如何遍歷Map <String, ArrayList> map = new HashMap <String, // ArrayList>(); System.out.println("java 遍歷Map <String, ArrayList> map = new HashMap<String, ArrayList>();"); Map<String, ArrayList> map = new HashMap<String, ArrayList>(); Set<String> keys = map.keySet(); Iterator<String> iterator = keys.iterator(); while (iterator.hasNext()) { String key = iterator.next(); ArrayList arrayList = map.get(key); for (Object o : arrayList) { System.out.println(o + "遍歷過程"); } } System.out.println("2222"); Map<String, List> mapList = new HashMap<String, List>(); for (Map.Entry entry : mapList.entrySet()) { String key = entry.getKey().toString(); List<String> values = (List) entry.getValue(); for (String value : values) { System.out.println(key + " --> " + value); } } } }
相關文章
相關標籤/搜索