Collection接口

概述:容器主要包括Collection和Map两种,Collection存储着单个对象的集合;而Map存储着键值对(两个对象key-->value)的映射表。

一、collection接口继承树:

说明:图中的i:为接口,c:为类。

二、特点:

1、Collection接口,是存放一组单值的最大父接口,所谓的单值是指集合中的每个元素都是一个对象。在新的开发标准中已经很少直接使用此接口进行操作了。

  • List接口是Collection接口的子接口;此接口对Collection接口进行了大量的扩充,里面的内容是允许重复的,有序存放的。
  • Set接口是Collection接口的子接口;Set没有对Colletion接口进行扩充,里面是不允许存放重复内容的,无序存放的;依靠Object类中的equals()和hashCode()方法来区分是否是同一个对象。
  • Queue队列接口,此接口的子类可以实现队列操作。

 

2、List接口

  • ArrayList:是List的子类,基于动态数组实现,支持随机访问;
  • Vector:是List的子类,功能和ArrayList类似;Vector是一个元老级的类,在JDK1.0时候就存在此类。在开发中ArrayList性能较高,属于异步处理;而Vector性能较低,属于同步处理。

                                                                            ArrayList和Vector类的主要区别

序号

比较点

ArrayList

Vector

1

推出时间

JDK1.2之后推出的,属于新的操作类。

JDK1.0时推出,属于旧操作类

2

性能

采用异步处理方式,性能更高

采用同步处理方式,性能较低

3

线程安全

属于非线程安全的操作类

属于线程安全的操作类

4

输出

只能使用Iterator、foreach输出

可以使用Iterator、foreach、Enumeration输出

LinkedList:是List和Queue接口的实现类;基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素;不仅如此,LinkedList还可以用作栈、队列和双向队列。

 

3、Set接口

  • HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用Iterator遍历HashSet得到的结果是不确定的。
  • SortedSet:此接口主要用于排序操作,即实现此接口的子类都属于排序的子类。
  • TreeSet:实现了SortedSet接口;基于红黑树实现,TreeSet的数据是有序存放的,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如HashSet,HashSet的查找时间复杂度为O(1),TreeSet则为O(logN)。
  • LinkedHashSet:具有HashSet的查找效率,且内部使用双向链表维护元素的插入顺序。

 

4、Queue接口

  1. Queue用于模拟队列这种数据结构,实现“FIFO”等数据结构。通常,队列不允许随机访问队列中的元素。
  2. Queue 接口并未定义阻塞队列的方法,而这在并发编程中是很常见的。BlockingQueue 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。
  3. Queue 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。
  • LinkedList:可以用它来实现双向队列;LinkedList类是List接口的实现类,同时它也实现了Deque接口。因此它也可以当做一个双端队列来用,也可以当作“栈”来使用。并且,它是以链表的形式来实现的,这样的结果是它的随机访问集合中的元素时性能较差,但插入与删除操作性能非常出色。
  • PriorityQueue:基于堆结构实现,可以用它来实现优先队列。PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按队列元素的大小重新排序。当调用peek()或者是poll()方法时,返回的是队列中最小的元素。当然你可以与TreeSet一样,可以自定义排序。

三、各种线性表选择策略

  1. 数组:是以一段连续内存保存数据的;随机访问是最快的,但不支持插入、删除、迭代等操作。
  2. ArrayList与ArrayDeque:以数组实现;随机访问速度还行,插入、删除、迭代操作速度一般;线程不安全。
  3. Vector:以数组实现;随机访问速度一般,插入、删除、迭代速度不太好;线程安全的。
  4. LinkedList:以链表实现;随机访问速度不太好,插入、删除、迭代速度非常快。  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值