Collection是List、Set、Queue的共同接口。Collection主要方法有:

int size():返回当前集合中元素的数量

boolean add(E e):添加对象到集合

boolean remove(Object o):删除指定的对象

boolean contains(Object o):查找集合中是否有指定的对象

boolean containsAll(Collection<?> c):查找集合中是否有集合c中的元素

boolean isEmpty():判断集合是否为空

Iterator iterator():返回一个迭代器

boolean addAll(Collection<? extends E> c):将集合c中所有的元素添加给该集合

boolean removeAll(Collection<?> c):从集合中删除c集合中也有的元素

boolean retainAll(Collection<?> c):从集合中删除集合c中不包含的元素

void clear():删除集合中所有元素

Object toArray():返回一个数组,该数组包含容器内所有元素

<T> T[] toArray(T[] a):返回一个数组,该数组包含容器内所有元素,返回结果的运行时类型与参数a类型相同

List<E> Set<E> Queue<E>都是继承Collection<E>的接口,同时它们也有自己的方法:

(1) List<E>

List是一个元素有序的、可以重复、可以为null的集合。List接口的实现类在实现插入元素时,都会根据索引进行排列。List中除了继承 Collection的一些方法,还提供以下操作:

指定位置的读取插入删除

E get(int index)

E set(int index, E element)

void add(int index, E element);

boolean addAll(int index, Collection<? extends E> c)

E remove(int index)

查找某个对象的位置

int indexOf(Object o)

int lastIndexOf(Object o)

使用 Iterator的拓展版迭代器ListIterator进行迭代操作。使用ListIterator可以对List进行向前、向后双向遍历,同时还允许进行add, set, remove等操作。

ListIterator<E> listIterator()

使用subList方法对list进行任意范围的操作

List<E> subList(int fromIndex, int toIndex)

Java集合框架中最常使用的几种List实现类是ArrayList,LinkedList和Vector。ArrayList作为默认选择。当插入、删除频繁时,使用LinkedList。Vector支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

(2) Set<E>

存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口,所以Set接口不能维护元素的次序。

HashSet作为默认选择,为快速查找而设计,存入其的元素都必须定义HashCode()。TreeSet是保持次序的Set,底层结构为树结构,它可以从Set中提取有序的序列,元素必须实现Comparable接口。LinkedHashSet具有HashSet的查询速度,同时内部使用链表维护元素插入的顺序,存入其的元素也必须定义HashCode()。

(3) Queue<E>

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。遵循先进先出原则(FIFO)。Queue的底层使用了数组。

boolean add(E e):添加元素到队列中,相当于进入队尾排队(Collection style)

boolean offer(E e):添加元素到队列中,相当于进入队尾排队(Queue style)

E remove():移除队头元素(Collection style)

E poll():移除队头元素(Queue style)

E element():获取但不移除队列头的元素(Collection style)

E peek():获取但不移除队列头的元素(Queue style)

除了并发应用,Queue在目前的Java中有几个实现:LinkedList-->Deque-->Queue,PriorityQueue-->Queue,ArrayDeque-->Deque-->Queue。

Deque是一个双向队列,这意味着两边都可以做队头/队尾。因此增加了addFirst(E e)/offerFirst(E e),addLast(E e)/offerLast(E e),removeFirst()/pollFirst(),removeLast()/pollLast(),getFirst()/peekFirst(),getLast()/peekLast()方法。

PriorityQueue是一个优先级队列,元素需要实现Comparable接口。compareTo()方法中优先级高的会被先取出来。

最新文章

  1. Firefox火狐Flash插件卡死问题完美解决方法(转载)
  2. PHP 对象及其三大特性
  3. 动软代码生成与 EntityFramework 实体生成模板
  4. 【BZOJ 2654】tree
  5. 免费安卓IOS测试API接口,后续会陆续增加接口
  6. Label的各个属性
  7. Direct UI
  8. Keepalive之nginx调度架构
  9. UML设计
  10. Codeforces Round #436 (Div. 2)D. Make a Permutation! 模拟
  11. 利用foo函数的Bof漏洞攻击:构造攻击字符串
  12. 我的 $OI$, 退役前写点东西
  13. Vue2.5开发去哪儿网App 第五章笔记 上
  14. C# 查出数据表DataTable 清除一列中的重复项保留其他项
  15. MySQL 日期类型及默认设置 (除timestamp类型外,系统不支持其它时间类型字段设置默认值)
  16. 【链表】Insertion Sort List
  17. 酷派大神F2使用QPST进行nv备份恢复,解决无信号问题
  18. 【python】理想论坛帖子爬虫1.06
  19. [C#] DataTable转成List集合
  20. CH5201 数组组合【01背包】

热门文章

  1. Lambda使用深入解析
  2. redis,windows设置记录
  3. JAVA遇见HTML——JSP篇(案例项目)
  4. [六省联考2017]分手是祝愿——期望DP
  5. [暂停维护]基于8211lib库对s57电子海图的解析和存储
  6. [React] Create a Persistent Reference to a Value Using React useRef Hook
  7. 微信小程序开发入门教程(二)---分析官方云开发例子中的一些功能
  8. Java的23种设计模式&lt;一&gt;
  9. Codeforces 1205C Palindromic Paths (交互题、DP)
  10. MySql数据类型及对应存储空间