Java常用容器類學習總結


 更多信息,請參考:http://www.cxyeye.com/

  Java類中的常用容器有HashMap,HashTable,ArrayList,TreeMap,LinkHashMap等,實際應用中應該如何選擇與使用,應該注意哪些東西?這里把工作中遇到的一些問題進行總結,以便以后碰到相同問題能更快解決。

 

容器的出入排序及大小排序

說明:此處的排序 是指:

1: 往集合中插入元素的順序與遍歷元素的順序的關系;

2: 往對象中插入元素后,遍歷的時候否會根據元素的大小排序(字符串、數字大小等)

 

public class MapSortTest {

    public static void main(String[] args) {
        
        System.out.println("放入順序為:a:aaa c:ccc b:bbb d:ddd ");
        System.out.println("HashMap 排序測試");
        Map map = new HashMap(); 
        map.put("a", "aaa");  
        map.put("c", "ccc");
        map.put("b", "bbb"); 
        map.put("d", "ddd"); 
        Iterator iterator = map.keySet().iterator(); 
        while (iterator.hasNext()) { 
            Object key = iterator.next(); 
            System.out.println("key:"+key+"         value:" + map.get(key)); 
        } 
        System.out.println("HashMap 進出無次序 ; key大小無次序 ");
        System.out.println("***********************************************************");
        
        
        System.out.println("Hashtable 排序測試");        
        Hashtable tab = new Hashtable(); 
        tab.put("a", "aaa"); 
        tab.put("c", "ccc");
        tab.put("b", "bbb");  
        tab.put("d", "ddd"); 
        Iterator iterator_1 = tab.keySet().iterator(); 
        while (iterator_1.hasNext()) { 
            Object key = iterator_1.next(); 
            System.out.println("key :"+key+"             value:"+ tab.get(key)); 
        } 
        System.out.println("Hashtable 進出無次序 ; key大小無次序 ");
        System.out.println("***********************************************************");
        
        System.out.println("TreeMap 排序測試");                
        TreeMap tmp = new TreeMap(); 
        tmp.put("a", "aaa"); 
        tmp.put("c", "ccc"); 
        tmp.put("b", "bbb"); 
        tmp.put("d", "ddd"); 
        Iterator iterator_2 = tmp.keySet().iterator(); 
        while (iterator_2.hasNext()) { 
            Object key = iterator_2.next(); 
            System.out.println("key:"+key+"          value:" + tmp.get(key)); 
        } 
        System.out.println("TreeMap 進出無次序 ; key大小從小到大 ");
        System.out.println("***********************************************************");
        
        System.out.println("LinkedHashMap 排序測試");                
        LinkedHashMap linkedHashMap = new LinkedHashMap(); 
        linkedHashMap.put("a", "aaa"); 
        linkedHashMap.put("c", "ccc"); 
        linkedHashMap.put("b", "bbb"); 
        linkedHashMap.put("d", "ddd"); 
        Iterator iterator2 = linkedHashMap.keySet().iterator(); 
        while (iterator2.hasNext()) { 
            Object key = iterator2.next(); 
            System.out.println("key:"+key+"          value:" + linkedHashMap.get(key)); 
        }         
        System.out.println("LinkedHashMap 先進先出; key大小無次序 ");
        System.out.println();
        
        System.out.println("ArrayList 排序測試");
        System.out.println("放入順序為:aaa ccc bbb ddd");
        ArrayList arrayList=new ArrayList(); 
        arrayList.add("aaa"); 
        arrayList.add("ccc"); 
        arrayList.add("bbb"); 
        arrayList.add("ddd"); 
        System.out.println("ArrayList 先進先出;值大小無次序 ");
//        Collections.sort(arrayList); 
        for(int i=0;i<arrayList.size();i++){ 
            System.out.println(arrayList.get(i)); 
        } 
        System.out.println("***********************************************************");
    }

}
View Code

 

運行結果:

放入順序為:a:aaa c:ccc b:bbb d:ddd 
HashMap 排序測試
key:d         value:ddd
key:b         value:bbb
key:c         value:ccc
key:a         value:aaa
HashMap 進出無次序 ; key大小無次序 
***********************************************************
Hashtable 排序測試
key :b             value:bbb
key :a             value:aaa
key :d             value:ddd
key :c             value:ccc
Hashtable 進出無次序 ; key大小無次序 
***********************************************************
TreeMap 排序測試
key:a          value:aaa
key:b          value:bbb
key:c          value:ccc
key:d          value:ddd
TreeMap 進出無次序 ; key大小從小到大 
***********************************************************
LinkedHashMap 排序測試
key:a          value:aaa
key:c          value:ccc
key:b          value:bbb
key:d          value:ddd
LinkedHashMap 先進先出; key大小無次序 

ArrayList 排序測試
放入順序為:aaa ccc bbb ddd
LinkedHashMap 先進先出;值大小無次序 
aaa
ccc
bbb
ddd
***********************************************************

 

大批量數據填充到容器中的性能提升

 在使用add()方法增加新的元素時,如果要增加的數據量很大,應該使用ensureCapacity()方法,該方法的作用是預先設置Arraylist的大小,這樣可以大大提高初始化速度。

 

使用匿名內部類對對List排序的方法:

List<Map.Entry<String, Integer>> info = new ArrayList<Map.Entry<String, Integer>>(maps.entrySet());
   
Collections.sort(info, new Comparator<Map.Entry<String, Integer>>() {         
    public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2){   
        return obj1.getKey().compareTo(obj2.getKey());//按key排序   
    //return obj2.getValue() - obj1.getValue(); //按value排序   
      }   
}); 
View Code

 

 

常用Map的遍歷方法,及方法的不同點  

Map的遍歷:

//方法1
Iterator<String> keySetIterator = keySetMap.keySet().iterator();   
while (keySetIterator.hasNext()) {   
    String key = keySetIterator.next();   
    String value = keySetMap.get(key);   
    System.out.println(value);
}  

//方法2
Iterator<Entry<String, String>> entryKeyIterator = entrySetMap.entrySet().iterator();   
while (entryKeyIterator.hasNext()) {   
    Entry<String, String> e = entryKeyIterator.next();   
    String key=e.getKey();
    String value=e.getValue();
    System.out.println(value);
} 
View Code

 

entrySet比keySet 效率要高很多。
 keySetMap.keySet()會生成KeyIterator迭代器,其next方法只返回其key值
 entrySetMap.entrySet()方法會生成EntryIterator 迭代器,其next方法返回一個Entry對象的一個實例,其中包含key和value
 方式一再取得key所對應的value時,此時還要訪問Map的這個方法,這時,方式一多遍歷了一次table。 

 更多信息,請參考:http://www.cxyeye.com/

 


免責聲明!

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



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