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()方法中优先级高的会被先取出来。

Java集合(5):理解Collection的更多相关文章

  1. Java 集合深入理解(8):AbstractSequentialList

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天有点无聊,来学学 AbstractSequentialList 解解闷 吧! AbstractSequentialLi ...

  2. Java 集合深入理解(7):ArrayList

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情有点美丽,学学 ArrayList 放松下吧! 什么是 ArrayList ArrayList 是 Java 集合 ...

  3. Java 集合深入理解(5):AbstractCollection

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天好累,来学学 AbstractCollection 吧! 什么是 AbstractCollection Abstrac ...

  4. Java 集合深入理解(4):List<E> 接口

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 蓝瘦!香菇! 连着加班几天,醉了.学学 List 放松下! 在 Java 集合深入理解:Collection 中我们熟悉了 ...

  5. Java 集合系列 02 Collection架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. Java 集合深入理解(3):Collection

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情有点粉,来学学 Collection 吧! 什么是集合? 集合,或者叫容器,是一个包含多个元素的对象: 集合可以对 ...

  7. Java 集合深入理解(15):AbstractMap

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天来了解下 AbstractMap. 什么是 AbstractMap AbstractMap 是 Map 接口的的实现类 ...

  8. Java 集合深入理解(14):Map 概述

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 终于把 List 常用的几种容器介绍完了,接下来开始 Map 的相关介绍. 什么是 Map Java 中的 Map 接口 ...

  9. Java 集合深入理解(12):古老的 Vector

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这 ...

  10. Java 集合深入理解(11):LinkedList

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情鱼肚白,来学学 LinkedList 吧! 日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就 ...

随机推荐

  1. P4016 负载平衡问题(最小费用最大流)

    P4016 负载平衡问题 题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nn 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬 ...

  2. Python3+Appium学习笔记01-环境配置(上)

    公司可能也有关于对app自动化的一些想法,让我去研究下.当然以移动互联网的热度.对于app自动化测试技术听闻已久.也一直想要去学习.正好.这次可以在工作时间中学习.emmm.希望自己能坚持把这个系列更 ...

  3. luogu4422 [COCI2017-2018#1] Deda[线段树二分]

    讨论帖:线段树二分的题..我还考场切过..白学 这题我一年前的模拟赛考场还切过,现在就不会了..好菜啊. 显然直接线段树拆成$\log n$个区间,然后每个区间在进行线段树二分即可. UPD:复杂度分 ...

  4. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 140: invalid continuation byte

    web阅片系统,遇到dicom文件在文件夹不能正常读取的问题.解决方法如下: def rep7(request): file_path = os.path.dirname(__file__) + re ...

  5. redis主从+哨兵 安装配置二

    实验环境: 192.168.2.201 centos7 master sentinel 192.168.2.202 centos7 slave   sentinel 192.168.2.203 cen ...

  6. 开发中少不了的Fun -- js判断设备

    判断是否是移动设备 var ua = window.navigator.userAgent.toLowerCase(); if(ua.indexOf('mobile')!== -1){ return ...

  7. C语言Ⅰ作业-05

    这个作业属于哪个课程 C语言程序设计Ⅰ 这个作业要求在哪里 https://www.cnblogs.com/tongyingjun/p/11722665.html 我在这个课程的目标是 熟练掌握如何用 ...

  8. log4j.properties通用配置

    一.Log4j的配置文件分类Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties(key=value)文件,其中properties格式的配置文件最为常用,其有一个固定的 ...

  9. Verilog状态机使用技巧

    “没有什么难处是通过增加一个状态机不能够解决的,如果不行,那就俩..” 在实现某种功能时,若感觉该功能的各种可能状态间的切换太绕了,此时,增加一个状态机往往能使思路变得清晰,功能的实现也就简单明了了. ...

  10. codeforces#1166F. Vicky's Delivery (Service并查集+启发式合并)

    题目链接: https://codeforces.com/contest/1166/problem/F 题意: 给出节点数为$n$,边数为$m$的图,保证每个点对都是互连的 定义彩虹路:这条路经过$k ...