Java各種集合容器的總結


Java容器指的是List,Set,Map這些類。由於翻譯的問題,問到集合,Collection這些指的都是它們幾個。

List

ArrayList 隨機訪問快

LinkedList 插入刪除快

這個好理解,array嘛就是數組,隨機訪問快。link嘛就是鏈表,當然是插入刪除快了。

 

Set 每個元素只能放一次

HashSet 使用散列

TreeSet 使用紅黑樹,會對元素排序,接口是SortedSet。初始化TreeSet時可以傳入Comparator對象的實現做為排序函數

LinkedHashSet 也使用散列,但使用鏈表來維護插入順序

Set的訪問順序

HashSet按照HashCode的順序

TreeSet對元素排序有兩種方法:1、對象implements Comparable。2、new TreeSet傳入參數T extends Comparator。

   易錯點:兩個不要搞反了。在創建TreeSet的時候可以不初始化任何排序方法,此時不會報錯。但添加對象進去的時候就會報錯了,提示cannot be cast to java.lang.Comparable

LinkedHashSet按照插入的次序顯示

關於HashCode

HashCode是一個int數值,同一個對象要求在get和put的HashCode是同一個。不同對象的HashCode不要求必須不同,只要equals方法能區分開就可以了。

一個實用的HashCode應該是基於對象內容的,並且分布平均的

 

Map相同的key只能放一次。這個key使用key對象的equals來判斷是否重復

HashMap 類似HashSet,按key的HashCode存放

LinkedHashMap 可以按照插入次序存放,或者最近最少使用LRU順序存放。比HashMap慢一點,但迭代訪問時更快

TreeMap 類似TreeSet,基於紅黑樹排序

此外還有WeakHashMap, ConcurrentHashMap, IdentityHashMap

 

各種容器的遍歷:

1、List集合的遍歷

List<Integer> list = new ArrayList<Integer>();
        //使用Iterator遍歷。缺點是不能隨機訪問
        Iterator iter = list.iterator();
        while(iter.hasNext())
        {
            Integer i = (Integer) iter.next();
        }
        //這個比較好。不過注意調用get(i)的時候千萬不要超出List的長度范圍,尤其是進行刪除操作之后!
        for(int i=0; i<list.size(); i++)
        {
            Integer n = list.get(i);
        }
        for(Integer i : list)
        {
            //可以直接對i操作
        }
        //java8的forEach和lambda表達式組合是最牛的。適合遍歷輸入或者操作。
        list.forEach(s -> System.out.println(s));

2、Set集合的遍歷

HashSet<Integer> iset = new HashSet<Integer>();
        iset.add(3);
        iset.add(8);
        iset.add(7);
        iset.add(11);
        //最簡單的必須是它
        iset.forEach(i -> System.out.println(i));
        //不能用for了,因為沒有隨機訪問的get函數啦!
        Iterator<Integer> iter = iset.iterator();
        while(iter.hasNext())
        {
            iter.next();
        }

3、Map集合的遍歷

Map<String, String> map = new HashMap<String, String>();
        map.put("111", "one");
        map.put("zz", "zzzzzzzz");
        map.put("a", "apple");
       
        //對於entrySet迭代
        Iterator iter = map.entrySet().iterator();
        while(iter.hasNext())
        {
            Entry entry = (Entry) iter.next();
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
       
        //對key的set迭代
        Iterator iter2 = map.keySet().iterator();
        while(iter2.hasNext())
        {
            String key = (String) iter2.next();
            System.out.println(key + ": " + map.get(key));
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM