Java容器-刷题篇


基本的容器有四个,分别对应四个接口:
List:按照插入的顺序保存元素,可以有重复的元素。
Set:不可以有重复的元素,可以理解为哈希表。
Queue:按照队列规则先进先出。
Map:将两个元素相关联,可以用键来查找值。

其中ListSetQueue这三个接口继承了Collection接口。
Map则是自成一家,没有继承别人。

各接口的常用实现类
ListArrayListLinkedList
SetHashSetTreeSetLinkedHashSet
MapHashMapTreeMapLinkedHashMap
QueuePriorityQueueLinkedList

ArrayListLinkedList这两个是实现类,实现了List接口,这两个类可能会增加一些接口没有的新方法(刷题时一般用不到)。
同理,SetQueueMap的实现类也一样。

接下来把这些关系用一副图表示出来
在这里插入图片描述

如果需要用到一个List容器可以像下面这样子定义

ArrayList<Integer> list = new ArrayList<>();

LinkedList<Integer> list = new LinkedList<>();

有人也会定义成

List<Integer> list = new ArrayList<>();

有什么区别呢?
区别就是用

ArrayList<Integer> list = new ArrayList<>()

定义出来的list可以使用的方法多一些。
而用

List<Integer> list = new ArrayList<>()

定义出来的list可以用的方法少一些,因为类实现接口的时候可能会增加一些新的方法。

一般情况都可以定义成

List<Integer> list = new ArrayList<>()

就行了。因为我们原本就是想用List这个容器,List里的方法已经够我们用了。

除非你一定需要用到ArrayList里面特有的方法你才定义成

ArrayList<Integer> list = new ArrayList<>()

其实使用哪个无所谓,只要不把自己困扰住就行了,知道为什么可以这样子定义就可以了。

SetMapQueue的定义也和List一样。

List

List接口的实现类有ArrayListLinkedList

ArrayList:底层使用数组实现的,查找快,插入数据和删除数据慢(常用)

LinkedList:底层使用链表实现的,查找慢,插入数据和删除数据快(常用)

创建一个List容器

List<Integer> list = new ArrayList<>()

List常用方法

list.add(int element)			//添加元素(常用)
list.get(int index)				//根据索引查找元素
list.size()						//反回元素的数量(常用)
list.isEmpty()					//判断是否为空(常用)

Set

Set接口实现类有

HashSet:使用散列函数查找快速(也就是常说的哈希查找)(常用)

TreeSet:排序默认从小到大

LinkedHashSet:使用链表维护元素的插入顺序

创建一个Set容器

Set<Integer> set = new HashSet<>()

Set常用方法

set.add()//添加元素
set.remove(Object o)//删除一个对象的引用
set.clear()//清空容器
set.isEmpty()//判断容器是否为空
set.contains(Object o)//判断容器是否包含o(常用)
set.size()//返回容器中元素的数目

Map

Map接口实现类有

HashMap:用于快速访问,常用与哈希有关的(常用)

TreeMap:键处于排序状态

LinkedHashMap:保持元素插入的顺序

创建一个Map容器

Map<String,Integer> map = new HashMap<>()

Map常用方法

map.put()								//添加键值对
map.remove(Object key)					//删除键值对
map.remove(Object key,Object value)		//删除键值对
map.size()								//返回元素的数量
map.clear()								//清空容器
map.isEmpty()							//判断容器是否为空
map.containsKey()						//判断容器是否包含某键
map.containsValue()						//判断容器是否包含某值

Queue

Queue接口实现类有

PriorityQueue:优先队列(常用)

LinkedList:普通队列(常用)

有些人可能有疑问 怎么Queue还和LinkedList联系起来了,其实Queue的添加队尾和删除队头不就是相等于插入链表的尾结点,和删除链表的头结点吗,所以说不需要在定义一个Queue的实现类了。

Queue常用方法

offer()添加元素(常用)
peek()返回第一个元素(常用)
poll()返回第一个元素并删除(常用)
add()添加元素
element()返回第一个元素
remove()返回第一个元素并删除
put()添加元素
take()返回第一个元素并删除

以上常用是基于刷题而言的。

如果是以后学到框架之类的需要用到其他线程安全性的容器,那时常用和少用就又不一样了,不过理解了这些,到时学线程安全的容器的时候上手也很快,原理差不多只是名字不同罢了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值