Java集合(5):理解Collection
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的更多相关文章
- Java 集合深入理解(8):AbstractSequentialList
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天有点无聊,来学学 AbstractSequentialList 解解闷 吧! AbstractSequentialLi ...
- Java 集合深入理解(7):ArrayList
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情有点美丽,学学 ArrayList 放松下吧! 什么是 ArrayList ArrayList 是 Java 集合 ...
- Java 集合深入理解(5):AbstractCollection
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天好累,来学学 AbstractCollection 吧! 什么是 AbstractCollection Abstrac ...
- Java 集合深入理解(4):List<E> 接口
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 蓝瘦!香菇! 连着加班几天,醉了.学学 List 放松下! 在 Java 集合深入理解:Collection 中我们熟悉了 ...
- Java 集合系列 02 Collection架构
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合深入理解(3):Collection
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情有点粉,来学学 Collection 吧! 什么是集合? 集合,或者叫容器,是一个包含多个元素的对象: 集合可以对 ...
- Java 集合深入理解(15):AbstractMap
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天来了解下 AbstractMap. 什么是 AbstractMap AbstractMap 是 Map 接口的的实现类 ...
- Java 集合深入理解(14):Map 概述
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 终于把 List 常用的几种容器介绍完了,接下来开始 Map 的相关介绍. 什么是 Map Java 中的 Map 接口 ...
- Java 集合深入理解(12):古老的 Vector
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这 ...
- Java 集合深入理解(11):LinkedList
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情鱼肚白,来学学 LinkedList 吧! 日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就 ...
随机推荐
- 通过JDBC驱动加载深刻理解线程上下文类加载器机制
关于线程上下文类加载器已经在之前学得比较透了,作为一个收尾,这里用平常J2EE开发时JDBC连接Mysql数据库常见的一段代码通过分析它的底层进一步加深对线程上下文类加载器的理解,所以先来将连接应用代 ...
- 箭头函数与定时器的this指向问题
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 箭头函数本身没有this,this继承上级的this. 定时器中箭头函数的this指向包含定时器的函数,所以定时器中的箭头函数要 ...
- 01—EF开山篇,ORM介绍
我是2014年接触的EF,用了一年多,感觉非常的方便,现在的公司没有使用,最近有朋友接了两个项目找我帮忙,都想使用EF,自己也有断时间没有使用,借着这个机会复习下.Entity Framework,简 ...
- CSCD核心,北大中文核心
从两篇文章看两个杂志 title 子空间聚类的重建模型及其快速算法 稀疏正则非凸优化问题之全局收敛分析 author 夏雨晴(浙江大学数学科学学院),张振跃 储敏(武汉大学数学与统计学院) journ ...
- move post process stack from package to asset
这东西折腾了我好久 原来一直都是打开的方式不对 package 文件夹里面的manifest文件 改相应的package为文件路径引用 "com.unity.render-pipel ...
- opengles reference card
https://www.khronos.org/files/opengles31-quick-reference-card.pdf https://www.khronos.org/opengles/s ...
- hbase实践之HFile结构
本文目录如下所示: 目录 HFile在HBase架构中的位置 什么是HFile HFile逻辑结构 HFile逻辑结构的优点 HFile物理结构 HFile生成流程 HFile中Block块解析 多大 ...
- BZOJ 1283: 序列 (最大费用流)
题意 有n个正整数,要选取里面的一些数,在保证每m个连续的数中最多选k个的情况下,使得得到的值最大. 分析 我们可以把问题先转化为选k次,每一次每m个数只能选一个.那么根据贪心的策略,每m个里一定会选 ...
- 调用jquery.Jcrop.min.js 切割图片 实例
需求是:上传一个图片,然后将上传的这个图片进行切割........ 首先是jsp页面.页面需要引入js <script src="${fileUrlPrx}/scripts/wap/ ...
- SSM框架初始配置
1 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="h ...