• 类集框架解析


        2017-08-20  16:30:32

      常用集合的总结:

    List:有序、可重复 

    Set:无序、不可重复

    Map:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值

     一、List(以ArrayList为例)

    1)ArrayList.remove(int)按照下标删除,不会自动装箱

        List list = new ArrayList();
            list.add(1);
            list.add(2);
            list.add(2);
            list.add(2);
            list.add(3);
            list.add(4);
            list.add(5);
            
            list.remove(new Integer(5));//删除值为5的键值对
                    list.remove(1);//删除下标为1的键值对

    2)迭代器遍历的同时,添加元素,并发修改异常,通过ListIterator解决

    public static void print(List list){
            ListIterator iter = list.listIterator();
            while(iter.hasNext()){
                Student s = (Student)iter.next();
                if(s.getName().equals("Jack"))
                    iter.add(new Student("Marry",20));
                System.out.println(iter.next());
            }
        }

    3)遍历集合删除元素,使用Iterater.remove()操作(否则会报并发修改异常)

            Iterator iter = list.iterator();
            while(iter.hasNext()){
                Integer i = (Integer)iter.next();
                if(i == 5)
                    iter.remove();
                System.out.println(iter.next());
            }

    4)集合数组互转用Arrays.asList()/ArrayList.toArray()  但要注意:数组转化成集合Arrays.asList() 转化后的集合为固定长度,不可改变

    5)List的三个子类的特点:

    ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高。 

    LinkedList:底层数据结构是链表,查询慢,增删快。线程不安全,效率高。 

    Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低。

    二、Set 

       a) 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数 

    当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象 如果没有哈希值相同

    的对象就直接存入集合 ,如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存。

     b)TreeSet:有序,不可重复。可以指定一个顺序, 对象存入之后会按照指定的顺序排列

      1)自然顺序(Comparable)
      TreeSet类的add()方法中会把存入的对象提升为Comparable类型
      调用对象的compareTo()方法和集合中的对象比较
      根据compareTo()方法返回的结果进行存储
      
      2)比较器顺序(Comparator)
      创建TreeSet的时候可以指定一个Comparator
      如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
      add()方法内部会自动调用Comparator接口中compare()方法排序
      调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数

      3)两种方式的区别
      TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
      TreeSet如果传入Comparator, 就优先按照Comparator

    三、Map

    1)HashMap和Hashtable的区别
    Hashtable是JDK1.0版本出现的,是线程安全的,效率低;HashMap是JDK1.2版本出现的,是线程不安全的,效率高
    Hashtable不可以存储null键和null值;HashMap可以存储null键和null值

    2)LinkedHashMap:链表实现,存放顺序和取出顺序一致

    3)TreeMap:可以根据键进行排序,排序规则的指定同TreeSet相同

    4)Map的遍历方式(包含增强for循环)

    public static void print1(Map map){
            Set keys = map.keySet();
            Iterator iter = keys.iterator();
            while(iter.hasNext()){
                Character key = (Character)iter.next();
                Integer value = (Integer)map.get(key);
                System.out.println(key + ":" + value);
            }
        }
    
    public static void print2(Map map){
            Set entrys = map.entrySet();
            Iterator iter = entrys.iterator();
            while(iter.hasNext()){
                Map.Entry entry = (Map.Entry)iter.next();
                Character key = (Character)entry.getKey();
                Integer value = (Integer)entry.getValue();
                System.out.println(key + ":" + value);
            }
        }
    
    public static void print3(Map map){
            Set entry = map.entrySet();
            for(Object entrys : entry){
                Map.Entry entryss = (Map.Entry)entrys;
                System.out.println(entryss.getKey() + ":" + entryss.getValue());
            }
        }
    
    public static void print4(Map map){
            Set keys = map.keySet();
            for(Object o : keys){
                Character key = (Character)o;
                System.out.println(key + ":" + map.get(key));
            }
  • 相关阅读:
    Atitit 理解Monad attilax总结Atiti
    Atitit sql执行计划
    Atitit 深入了解UUID含义是通用唯一识别码 (Universally Unique Identifier),
    atitit..代码生成流程图 流程图绘制解决方案 java  c#.net  php v2
    Atitit 项目培训与学校的一些思路总结
    Atitit 项目的主体设计与结构文档 v3
    Atitit  数据存储的分组聚合 groupby的实现attilax总结
    Atitit 数据存储的数据表连接attilax总结
    Atitit图像识别的常用特征大总结attilax大总结
    Atitit 项目中的勋章体系,,mvp建设 ,荣典体系建设
  • 原文地址:https://www.cnblogs.com/wsyblog/p/7400686.html
Copyright © 2020-2023  润新知