`
sui366
  • 浏览: 32267 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java集合类详解

    博客分类:
  • jdk
阅读更多

转载

 

Collection: 用于管理多个对象的对象。集合中的元素是对象。

1、List接口
 概述:
  1)特点: List接口继承了Collection接口,是有序的集合,且List允许有重复的元素。
  2)遍历:
   迭代遍历: 通过iterator()方法返回的迭代器进行遍历;
   for循环: 通过get(int index)在循环中遍历;
   * 除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,能向前或向后遍历。
  3) 排序: 通过Collections类中的静态方法sort(List)对List进行排序;
   * 注意,列表中的所有元素都必须实现 Comparable 接口.
    4)实现List接口的常用类有:LinkedList,ArrayList,Vector和Stack。

 实现类:
  1)ArrayList类
     ArrayList实现了可变大小的数组。每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。
   这个容量可随着不断添加新元素而自动增加,当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
     ArrayList是非同步的(unsynchronized)。

  2)LinkedList类
       LinkedList是List接口的链表实现,提供了在链表开头和结尾增删元素的方法,可被用作堆栈(stack),队列(queue)或双向队列(deque)。
     LinkedList也是非同步的。

  3)Vector类
     Vector是遗留类,非常类似于ArrayList,但是Vector是同步的。

  4)Stack 类
     Stack继承自Vector,实现一个后进先出的堆栈。

2、Set接口
 
 概述:
  1)特点:Set接口也继承于Collection接口,是无序的集合,且它不允许包含重复的元素。
  2)遍历:通过iterator()方法返回的迭代器进行遍历;
  3)SortedSet是Set的子接口;实现Set接口的常用类有:HashSet, TreeSet。

 实现类:
  1)HashSet类
   实现了Set接口,由哈西表支持。
   * 注意,放入HashSet中的元素要覆盖Object类的hashCode()方法和equals()方法,必须保证相同的对象返回的hashCode值相同。
   
  2)TreeSet类
   实现了SortedSet接口,它会对添加的元素自动进行升序排序。
   * 注意,在TreeSet集合中必须放同类元素,且元素之间可进行比较(可实现Comparable接口)。
3、Map接口
 概述:
    1)特点:Map没有继承Collection接口,Map提供key到value的映射。一个映射不能包含重复的key,每个key只能映射一个value。
  2)遍历:Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
  3)SortedMap是Map的子接口;实现Map接口的常用类有:HashMap, HashTable, TreeMap。
 实现类:
  1)Hashtable类
     实现一个key-value映射的哈希表。任何非空的对象都可作为key或者value。添加数据使用put(key, value),取出数据使用get(key)。    
   由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须覆盖hashCode()和equals()方法。
   Hashtable是同步的。

   * hashCode()和equals()方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,
   则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,
   所以尽量定义好的hashCode()方法,能加快哈希表的操作。
   需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。
    
  2)HashMap类
     HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。
  3)TreeMap类
   实现了SortedMap接口,该映射按照键值自动排序。插入该映射的所有键必须实现 Comparable 接口。
   也是非同步的。

Collection使用总结:
    如果涉及到堆栈,队列等操作,应该考虑用List。
  对于需要快速插入,删除元素,应该使用LinkedList。
  如果需要快速随机访问元素,应该使用ArrayList。
    如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高;如果多个线程可能同时操作一个类,应该使用同步的类。
    要特别注意对哈希表的操作,作为key的对象要正确覆盖equals()和hashCode()方法。
    尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。


补充: Collections类提供了很多用于操作集合的静态方法:  Collections.sort(List)、Collections同步方法等 

  
  
   
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics