Java集合框架

Java Collections Framework(Java集合框架)是Java提供的对集合进行定义,操作和管理的包含一组接口,类的体系结构。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。
所有的集合类都位于java.util包下。
Java集合框架的基本接口/类层次结构:

java.util.Collection [I]

+--java.util.List [I]
   +--java.util.ArrayList [C] 
   +--java.util.LinkedList [C]
   +--java.util.Vector [C]
      +--java.util.Stack [C]
+--java.util.Set [I]
   +--java.util.HashSet [C]
   +--java.util.SortedSet [I]
      +--java.util.TreeSet [C]

java.util.Map [I]
+--java.util.SortedMap [I]
   +--java.util.TreeMap [C]
+--java.util.Hashtable [C]
+--java.util.HashMap [C]
+--java.util.LinkedHashMap [C]
+--java.util.WeakHashMap [C]

[I]:接口
[C]:类

Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object的集合,这些Object称为Collection的元素。Collection是一个接口,用于提供规范化定义,不能被实例化使用。
Interface Iterator——迭代器接口,这是Collection的父接口,只有iterator()这一个方法,它返回一个代表当前集合对象的泛型< T >迭代器,用于之后的遍历操作。所有的Collection集合对象都实现了这个接口,因此所有的Collection集合对象都具有foreach可遍历性。典型的遍历方法如下:

Iterator it = collection.iterator();    //获得一个迭代子
while(it.hasNext()){
    Object obj = it.next();             //得到下一个元素
}

根据用途的不同,Collection又分为List和Set。

  1. List
    List继承自Collection接口,代表一个元素有序、可重复的接口,集合中所有元素都有其对应的顺序索引,用户可以使用索引来添加、删除或访问集合中的元素。
    除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个 ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加、删除、设定元素, 还能向前或向后遍历。
    实现List接口的常用类有ArrayList,LinkedList,Vector,Stack。

  2. Set
    Set同样继承自Collection接口,与List不同,Set中的元素具有无序性和不可重复性(类似数学概念中的集合),换句话说,Set中最多只有一个null元素,且Set集合中任意两个元素e1,e2都满足

 e1.equals(e2)==false;

Map接口
Map与Collection是两种不同的集合,Collection可以看作是value的集合,Map则看作是(key,value)的键值对集合,其中key集合的元素不能重复。
实现Map接口的常用类有HashTable,HashMap,LinkedHashMap,WeakHashMap。

总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
在除需要排序时使用TreeSet,TreeMap外,都应使用HashSet,HashMap,因为他们的效率更高。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。

容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。一旦将对象置入容器内,便损失了该对象的型别信息。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

注意:
1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)…。(add/get)
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。
5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
HashMap会利用对象的hashCode来快速找到key。

6、Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。
使用values()抽取value序列,将map中的所有values生成一个Collection。
为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

参考
http://www.cnblogs.com/LittleHann/p/3690187.html
http://blog.sina.com.cn/s/blog_a345a8960101k9vx.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值