码迷,mamicode.com
首页 > 其他好文 > 详细

集合框架

时间:2015-12-07 16:12:04      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

http://www.cnblogs.com/zhxxcq/archive/2012/04/30/2476979.html
1.集合
    Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。
    Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List。
    Map实现类用于保存具有映射关系的数据(key-value)。
    Set、List和Map可以看做集合的三大类。

    List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
    Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。
    Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。
    对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayList和HashMap三个实现类。
2.集合遍历
   1、Iterator接口
    Iterator也是Java集合框架的成员,主要用于遍历(即迭代访问)Collection集合中的元素,也称为迭代器。
    提供的三种方法:
    boolean hasNext():返回集合里的下一个元素。
    Object next():返回集合里下一个元素。
    void remove();删除集合里上一次next方法返回的元素。
  2、使用foreach循环遍历集合元素。
    (1)foreach简化了对数组和集合的遍历,如果不希望遍历整个集合,或者在循环内部需要操作下标值就需要使用传统的for循环。
    (2)简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。
    (3)foreach一般结合泛型使用
    格式:for(元素类型 t  元素变量 x : 遍历对象A) {
                     System.out.println(x);}
3.Set接口
    Set集合对象之间没有明显的顺序。不允许重复元素,是因为Set判断两个对象相同不是使用==运算符,而是根据equals方法。即两个对象用equals方法比较返回true,Set就不能接受两个对象。
    
    1.HashSet类
    HashSet按Hash算法来存储集合的元素,因此具有很好的存取和查找性能。
     HashSet的特点:
    (1)HashSet不是同步的,多个线程访问是需要通过代码保证同步
    (2)集合元素值可以使null。
    HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。
4.List接口
    List集合是有序集合,可以根据索引来插入、替换和删除集合元素
    与set只提供了一个iterator()方法不同,List还额外提供了一个listIteratro()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。
    ListIterator接口在Iterator接口基础上增加了如下方法:
    boolean hasPrevious():返回该迭代器关联集合是否还有上一个元素。
    Object previous():返回该迭代器上一个元素。
    void add():在指定位置插入一个元素。

    1.ArrayList和Vector实现类
    ArrayList和Vector类都是基于数组实现的List类,他们封装了一个动态再分配的Object[]数组。
    ArrayList和Vector的区别:ArrayList是线程不安全的,多个线程访问同一个ArrayList集合时,如果有超过一条线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。
    Vector集合则是线程安全的,无线程序保证该集合的同步性。因为Vector是线程安全的,所以Vector的性能比ArrayList的性能要低。
    实际上,即使保证List集合线程安全,同样不推荐使用Vector实现类。Collections工具类,可以将一个ArrayList变成线程安全的。

    2.LinkedList实现类
     List还有一个LinkedList的实现,它是一个基于链表实现的List类,对于顺序访问集合中的元素进行了优化,特别是当插入、删除元素时速度非常快。

    关于使用List集合的几点建议:
            如果需要遍历List集合元素,对应ArrayList、Vector集合,则应该使用随机访问方法(get)来遍历集合元素,这样性能更好。对应LinkedList集合,则应采用迭代器(Iterator)来遍历集合元素。
            如果需要经常执行插入、删除操作来改变Lst集合大小,则应该使用LinkedList集合,而不是ArrayList。
            如果多条线程需要同时访问List集合中的元素,可以考虑使用Vector这个同步实现。

5.Map接口
    Map用于保存具有映射关系的数据(key-vlaue)。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false
    Map中包含了一个keySet()方法,用于返回Map所以key组成的Set集合。

    1、HashMap和Hashtable实现类    
    Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable的性能高些;但如果多线程访问同一个Map对象,使用Hashtable实现类更好。
    Hashtable不允许使用null作为key和value,如果为null,则引发NullPointerException异常;但HashMap可以使用null作为key或value。
    HashMap、Hashtable判断两个key相等的标准是:两个key通过equasl方法比较返回ture,两个key的hashCode值相等。

    2、SortedMap接口和TreeMap实现类
    Map接口派生了一个SortedMap子接口,TreeMap为其实现类。类似TreeSet排序,TreeMap也是基于红黑树对TreeMap中所有key进行排序,从而保证TreeMap中所有key-value对处于有序状态。TreeMap两种排序方法:
    自然排序:TreeMap的所有key必须实现Comparable接口,而且所有key应该是同一个类的对象,否则将会抛出ClassCastExcepiton异常。
    定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中所有key进行排序。采用定制排序时不要求Map的key实现Comparable接口。
    TreeMap中判断两个key相等的标准也是两个key通过equals比较返回true,而通过compareTo方法返回0,TreeMap即认为这两个key是相等的。


集合框架

标签:

原文地址:http://www.cnblogs.com/a243204404/p/5026211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!