zoukankan      html  css  js  c++  java
  • 类集框架解析

        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));
            }
  • 相关阅读:
    OpenStack开发基础-oslo.config
    对象的封装
    Oracle动态显示日志
    Marching squares & Marching cubes
    Keil5.15使用GCC编译器链接.a库文件
    数据结构习题之树
    HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)
    使用URL在线语音合成
    企业怎样高速搭建大数据处理系统
    http://blog.sina.com.cn/s/blog_7caae74b0100zl17.html
  • 原文地址:https://www.cnblogs.com/wsyblog/p/7400686.html
Copyright © 2011-2022 走看看