Java集合总结

来源:互联网 发布:网络教育招生代理 编辑:程序博客网 时间:2024/05/16 00:26

            总结
集合:
数组:固定长度,类型单一,集合的大小是可以自增的,类型可以混合的。
集合(集合类的对象)是用来管理其他若干对象的。它类似于C++标准模板库中的容器,不过在JAVA的集合类的对象中可以用来存放多种类型的对象。
接口和类共同构成了一个集合框架,集合的概念,一个对象可以装载多个对象,这个对象就是集合对象。
1,接口
      Collection 
                   ↑ 
             |ˉˉˉˉˉˉ|     
            Set          List        Map 
             ↑                      ↑ 
             |                        | 
          SortedSet              SortedMap 
集合中用到的类,接口在java.util包中,在使用时注意将其引入import。
Collection 接口: 用来管理多个对象,集合中的每个元素都是对象。
1)List接口: 一个List的实现类的对象在管理多个对象时会按顺序组织对象(即按照将对象放入的顺序存储)
                List实现类的对象是有顺序的,List实现类对象中的内容是可重复的。(注意,顺序和排序的区别)
     List接口的特点:有序存放,允许重复,可放不同类型对象
2)Set接口: 一个Set的实现类表示一个数学概念上的集合,Set的实现类的对象中的元素是无顺序的,也就是不会按照输入顺序来存放,
     Set的实现类对象中的元素是不重复的。
    Set接口的特点:无序存放,不允许重复,也可以存放不同类型对象
3)SortedSet接口:它是Set的子接口,他的实现类会对集合中的元素进行排序。但是要指定排序规则,他会按排序规则进行排序。
Map,Map中没有对象,而是键值对,由Key,value组成的键值对
     Key是没有顺序,不可重复的。
     value是可以相同的,一个Key和一个value一一对应。
Map 接口(以下介绍其子接口)
SortedMap,这个接口的实现类同样可以实现,不过是对键值对中的Key进行排序,这个接口的实现类也是要指定排序规则的
2、List接口的实现类
(Collection)       括号中的是接口,旁边的是此接口的实现类 
                   ↑ 
             |ˉˉˉˉˉˉ|     
          HashSet     LinkedList       Hashtable 
           (Set)    Vector, ArrayList   Hashmap 
                        (List)           (Map) 
             ↑                           ↑ 
             |                             | 
           TreeSet                     TreeMap 
         (SortedSet)                 (SortedMap) 
1> ArrayList是接近于功能的集合类,ArryList的实质就是一个会自动增长的(支持泛型的)数组,ArrayList是用封装的数组来实现的List接口的,底层用数组实现的。
初始容量是10,当超过容量时会进行扩容(容量*1.5+1);
往集合中添加数据(课堂代码:TestList.java)
使用泛型(课堂代码:TestListF.java)
使用泛型的好处,可以保证存储的类型一致,坏处是不再允许多种对象混存
在开发中能用泛型的时候最好用泛型。
扩容:(课堂代码:TestListCap.java)
long strat=System.currentTimeMillis();返回一个从1970年1月1日0时0分0秒到现在为止的毫秒
使用这个扩容方法进行手工扩容ensureCapacity(100000); 手工扩容,可以大幅提高性能。
2> LinkedList,它是List接口的实现类,其底层是用双向循环链表来实现的。
注意:ArrayList的查询效率比较高,增删动作的效率比较差,适用于查询比较频繁,增删动作较少的元素管理的集合。
             LinkedList的查询效率低,但是增删效率很高。适用于增删动作的比较频繁,查询次数较少的元素管理集合。
     ArrayList,LinkedList都是线程不安全的。
3> Vector: 底层用数组实现List接口的另一个类
    特点:重量级,占据更多的系统开销 线程安全
         (与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)
结论:在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)。
面试经验(知识点):
java.util.stack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,
且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
对于堆栈和队列只能用push类和get类。
Stack类以后不要轻易使用。