更多信息,請參考: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("***********************************************************"); } }
運行結果:
放入順序為: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排序 } });
常用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); }
entrySet比keySet 效率要高很多。
keySetMap.keySet()會生成KeyIterator迭代器,其next方法只返回其key值
entrySetMap.entrySet()方法會生成EntryIterator 迭代器,其next方法返回一個Entry對象的一個實例,其中包含key和value
方式一再取得key所對應的value時,此時還要訪問Map的這個方法,這時,方式一多遍歷了一次table。
更多信息,請參考:http://www.cxyeye.com/