JAVA 集合框架



Collection

  • ①List
    保存输入的顺序,而且可以重复的存储相关元素。
    ArrayList(随机访问)(数组线性表)
    ArrayList数组线性表的特点为:类似数组的形式进行存储,因此它的随机访问速度极快
    ArrayList数组线性表的缺点为:不适合于在线性表中间需要频繁进行插入和删除操作。因为每次插入和删除都需要移动数组中的元素。可以这样理解ArrayList就是基于数组的一个线性表,只不过数组的长度可以动态改变而已。ArrayList非线程安全
    LinkedList(频繁删除添加)(链式线性表)
    您要频繁的从列表的中间位置添加和除去元素,而只要顺序的访问列表元素,那么,LinkedList 实现更好。
    可以这样理解LinkedList就是一种双向循环链表的链式线性表,只不过存储的结构使用的是链式表而已。
    Vector(向量)
    如果一定在多线程使用List的,您可以使用Vector,因为Vector和ArrayList基本一致,区别在于Vector中的绝大部分方法都使用了同步关键字修饰,这样在多线程的情况下不会出现并发错误哦,还有就是它们的扩容方案不同,ArrayList是扩展原始容量的1/2,即1.5倍。而Vector是允许设置默认的增长长度,Vector的默认扩容方式为原来的2倍。
    切记Vector是ArrayList的多线程的一个替代品。
    Stack(栈)
    在各种List中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();Vector总是比ArrayList慢,所以要尽量避免使用。使用最多的是ArrayList。

  • ②Set
    Set子接口: 无序,不允许有重复的元素,最多允许有一个null元素对象
    HashSet(没有顺序)
    您会使用 HashSet 存储重复自由的集合。考虑到效率,添加到 HashSet 的对象需要采用恰当分配哈希码的方式来实现hashCode()方法。虽然大多数系统类覆盖了Object中缺省的hashCode()和equals()实现,但创建您自己的要添加到HashSet的类时,别忘了覆盖 hashCode()和equals()。
    LinkedHashSet(添加顺序会被记录)
    如果想跟踪添加给HashSet的元素的顺序,LinkedHashSet实现会有帮助。 按照元素的插入顺序来访问各个元素。它提供了一个可以快速访问各个元素的有序集合。
    TreeSet(按照比较器排序)
    当您要从集合中以有序的方式插入和抽取元素时,TreeSet实现会有用处。
    为了能顺利进行。添加到TreeSet的元素必须是可排序的。
  • 在各种Set中,HashSet通常优于TreeSet(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
    TreeSet存在的唯一理由:能够维护其内元素的排序状态。

  • ③Map

Map接口用于维护键/值对(key/value pairs)。该接口描述了从不重复的键到值的映射。
HashMap
在Map 中插入、删除和定位元素,HashMap 是最好的选择。
LinkedHashMap(包含插入顺序)
以插入顺序将关键字/值对添加进链接哈希映像中
TreeMap(排序)
但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
WeakHashMap
它使用WeakReference(弱引用)来存放哈希表关键字。使用这种方式时,当映射的键在 WeakHashMap 的外部不再被引用时,垃圾收集器会将它回收,但它将把到达该对象的弱引用纳入一个队列。WeakHashMap的运行将定期检查该队列,以便找出新到达的 弱应用。当一个弱引用到达该队列时,就表示关键字不再被任何人使用,并且已经被收集起来。然后WeakHashMap便删除相关的映射。
Hashtable

  • 历史集合类,Hashtable采用同步机制,线程安全,现在一般很少使用。
    1. Array
      我们都知道,由于Array(数组)通常意义上讲只是一个单纯的线性序列,又基于Native(本地方法),凭此它的效率历来便号称Java中最高。所以通常我们也都承认Java中效率最高的存储方式就是使用数组。但是,由于数组初始化后大小固定,索引不能超出下标,缺少灵活的扩展功能等原因,使得很多人放弃了数组的使用, 转而使用Collection,List,Map,Set等接口处理集合操作。
  • 当元素个数固定,用Array,因为Array效率是最高的


在实际工作中,若用到集合框架,最常用的是ArrayList,HashSet,HashMap。这三者也是首先考虑的。而且,因为TreeXXX继承SortedXXX,所以用TreeXXX都是排序的。

参考:http://www.imooc.com/article/7577

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值