• 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/

  • 相关阅读:
    Mac 配置 php-fpm 时出现'/private/etc/php-fpm.conf': No such file or directory (2)
    Lua数学库
    Nginx在Windows上启动、停止的命令
    Javascript虚拟机
    Tiled Forward Shading Links
    Xcode同一个Workspace中两个工程依赖于Undefined Symbol Error
    Clang: Undefined symbols, but it is there using nm.
    MVC+Ext.net零基础学习记录(二)
    MVC+Ext.net零基础学习记录(一)
    根据某个字符串查找整个数据库
  • 原文地址:https://www.cnblogs.com/duankaige/p/2624070.html
Copyright © 2020-2023  润新知