Java集合

Java集合类是一种特别有用的工具类,可用于储存数量不等的对象,并可以实现常用的数据结构
Java集合还可以用于保存具有映射关系的关联数组

Java集合大致可分为【List】、【Set】、【Queue】和【Map】四种体系
List代表有序,重复的集合
Set代表无序,不可重复的集合
Queue体系集合,代表一种队列集合实现
Map则代表具有映射关系集合

1、Java集合概述
为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组)
集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类
集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量);而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)
Java的集合类主要由两个接口派生而出: Collection和Map, Collection和Map是Java集合框架的根接口
在这里插入图片描述

2、List集合概念
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。
Lst集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。
List集合默认按元素的添加顺序设置元素的索引

List集合的注意事项:
1、Vector是线程安全的,ArrayList不是线程安全的。
2、ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。

List的常用方法
(1)、add() 向列表的尾部添加指定的元素
(2)、add()在列表的指定位置插入指定元素
(3)、addAll()添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。
(4)、addAll() 所有元素都插入到列表中的指定位置
(5)、clear() 从列表中移除所有元素/清空
(6)、contains() 如果列表包含指定的元素,则返回 true
(7)、containsAll() 它是否包含另外一个小的数组
(8)、get()返回列表中指定位置的元素
(9)、indexOf() 返回某一个元素第一次出现的索引位置
(10)、lastIndexOf() 返回某一个元素最后一次出现的索引位置
(11)、isEmpty() 如果列表不包含元素,则返回 true
(12)、remove() 移除列表中指定位置的元素
(13)、remove()移除第一次出现的指定元素
(14)、removeAll()移除指定 数据 中包含的其所有元素(只要包含就移除)
(15)、retainAll() 只保留指定数据中包含的其所有元素(只要不包含就移除)
(16)、set() 用指定元素替换列表中指定位置的元素
(17)、size() 返回列表中的元素数
(18)、toArray() 返回按适当顺序包含列表中的所有元素的数组
(19)、iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器
(20)、hasNext() 是否还有下一个

3、Comparable和Comparator
1、Comparable 是排序接口。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序
2、Comparator是比较接口。可以通过实现Comparator来新建一个比较器,然后通过这个比
较器对类进行排序

注意:(1)、若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2) 函数,但可以不实现equals(Object obj) 函数。
(2)、int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。

Comparable和Comparator的比较
Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。
Comparator是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。 用Comparable简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了

Set集合
Set集合通常不能记住元素的添加顺序
Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失
败,add()方法返回 false,且新元素不会被加入。

set的常用方法
(1)、add() 如果 set 中尚未存在指定的元素,则添加此元素
(2)、addAll()如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中
(3)、contains() 如果 set 包含指定的元素,则返回 true
(4)、clear() 清空
(5)、isEmpty() 如果 set 不包含元素,则返回 true
(6)、Iterator() 返回在此 set 中的元素上进行迭代的迭代器
(7)、remove() 如果 set 中存在指定的元素,则将其移除
(8)、removeAll() 移除 set 中那些包含在指定 collection 中的元素
(9)、retainAll() 保留这个集合中有的
(10)、size() 返回列表中的元素数
Set集合有三大类 分别是HashSet类、LinkedHashSet类和TreeSet类而比较常用的是TreeSet类
(一)、HashSet类
HashSet类是Set接口的典型实现类,大多数时候使用Set集合时就是使用这个实现类。 HashSet类 按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能
特点有:(1)、不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。
(2)、HashSet不是同步的(不是线程安全的),如果多个线程同时访问一个 HashSet
(3)、集合元素值可以是null,但只能放入一个nul
最后HashSet判断元素是否相等的依据:hashCode()相同,equals()方法相同;

(二)、LinkedHashSet类
LinkedHashSet需要维护元素的插入顺序,因此性能略低于 HashSet的性能,但在迭代访问Set里的
全部元素时将有很好的性能,因为它以链表来维护内部顺序

(三)、TreeSet类
TreeSet是 SortedSet接口的实现类,正如 SortedSet名字所暗示的, TreeSet可以确保集合元素处于排序状态。与 Set集合相比,TreeSet还提供了如下几个额外的方法。
(1)、first()返回当前第一个(最低)元素
(2)、last() 返回当前最后一个(最高)元素
(3)、floor()返回小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。
(4)、lower()返回严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null
(5)、ceiling()返回大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null。
(6)、higher()返回严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null。
(7)、headSet()返回部分视图,其元素严格小于 toElement
(8)、subSet()返回部分视图,其元素从 fromElement(包括)到 toElement(不包括)
由于TreeSet是有序的,也支持Comparable和Comparator两种排序方式

Queue 队列
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口
element()、peek()、poll()、remove()区别是:element()和remove()如果是空的队列会报错,peek()和poll()如果是空的队列会返回null
(1)、element()获取,但是不移除此队列的头
(2)、peek()获取但不移除此队列的头;如果此队列为空,则返回 null
(3)、poll()获取并移除此队列的头,如果此队列为空,则返回 null
(4)、remove()获取并移除此队列的头

Map集合
Map 键值对 键和值都是对象 Map可以看成根据对象查找对象
Map接口中键和值一一映射. 可以通过键来获取值
(1)、给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值
(2)、当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常
(3)、当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常
(4)、当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常
(5)、当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常
常用的方法有:
(1)、put()将指定的值与此映射中的指定键关联
(2)、putAll() 从指定映射中将所有映射关系复制到此映射中
(3)、remove()如果存在一个键的映射关系,则将其从此映射中移除
(4)、containsKey() 如果此映射包含指定键的映射关系,则返回true
(5)、containsValue()如果此映射将一个或多个键映射到指定值,则返回true
(6)、entrySet() 返回此映射中包含的映射关系的 Set 视图
(7)、keySet()返回此映射中包含的键的 Set 视图
(8)、get()返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
(9)、put() 也有修改的作用
(10)、values() 返回所有的值
(11)、clear()从此映射中移除所有映射关系 清空

TreeMap类
与 TreeSet类似的是,TreeMap中也提供了一系列根据key顺序访问key-value对的方法:
(1)、TreeMap 不允许主键null (为空)
(2)、firstKey()返回此映射中当前第一个(最低)键
(3)、firstEntry()返回一个与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null
(4)、lastKey()返回映射中当前最后一个(最高)键
(5)、lastEntry()返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null
(6)、heigerKey()返回严格大于给定键的最小键;如果不存在这样的键,则返回null
(7)、heigerEntry()返回一个键-值映射关系,它与严格大于给定键的最小键关联;如果不存在这样的键则返回null
(8)、lowerKey()返回严格小于给定键的最大键;如果不存在这样的键,则返回 null
(9)、lowerEntry()返回一个键-值映射关系,它与严格小于给定键的最大键关联;如果不存在这样的键,则返回 null
(10)、headMap()返回此映射的部分视图,其键值严格小于 toKey
(11)、tailMap()返回此映射的部分视图,其键大于等于 fromKey
(12)、subMap()返回此映射的部分视图,其键值的范围从 fromKey(包括到 toKey(不包括)
由于TreeMap是有序的,也支持Comparable和Comparator两种排序方式。TreeMap主要是Key值排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值