当初学java时,只是简单的把java基础知识过了一遍就跑去刷题了,很多知识都是在刷题的过程中慢慢加深理解的。

由于每次刷题时,刷到与容器有关的我基本上都跑去百度了,例如百度一下:java中List的常用方法。

百度的次数不少,但总感觉不成体系,容易搞混,于是在这篇文章中总结了刷题过程中容器的一些常用方法。以此减少自己以后百度的次数。

如果你想复习一下容器的常用方法或者希望以后在容器这方面能少百度几次的话,相信这篇文章对你一定会有帮助。

容器,就是保存数据用的的东西

容器不需要定义大小,会自动扩容

基本的容器有四个,分别对应四个接口:

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

其中List、Set、Queue这三个接口继承了Collection接口。

Map则是自成一家,没有继承别人。

各接口的常用实现类

  • List:ArrayList、LinkedList
  • Set:HashSet、TreeSet、LinkedHashSet
  • Map:HashMap、TreeMap、LinkedHashMap
  • Queue:PriorityQueue、LinkedList

ArrayList和LinkedList这两个是实现类,实现了List接口,这两个类可能会增加一些接口没有的新方法(刷题时一般用不到)。

同理、Set、Queue、Map的实现类也一样。

接下来把这些关系用一副图表示出来

如果需要用到一个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<>()

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

Set和Map和Queue的定义也和list一样。

List接口的实现类有ArrayList、LinkedList

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

创建一个List容器

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

List常用方法有

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

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接口实现类有

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

TreeMap:键处于排序状态

LinkedHashMap:保持元素插入的顺序

创建一个Set容器

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接口实现类有

  • PriorityQueue:优先队列(常用)
  • LinkedList:普通队列(常用)

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

Queue常用方法有

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

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

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

如果觉得有收获,不妨花个几秒钟点个赞,欢迎关注我的公众号玩编程地码农,目前专注写数据结构与算法和计算机基础等相关知识。

最新文章

  1. js创建节点及其属性
  2. [转]Java_List元素的遍历和删除
  3. ngrok内网穿透利器在windws下的使用
  4. asp获取文件名和扩展名的函数代码
  5. form表单和ajax表单提交(Html.BeginForm()、Ajax.BeginForm())的差别
  6. Jquery——思维导图
  7. Java学习——变量类型
  8. linux 信号列表和基本作用
  9. (十二)学习CSS之box-sizing 属性
  10. Spring In Action 第4版笔记-第一章-001架构
  11. OpenGL ES 2.0 限定符
  12. GDB dump mem example和命令
  13. Flink知识点
  14. 兼容IE浏览器样式的html上传文件控件
  15. windows Docker Desktop 搭建mysql,mssql和redis服务
  16. &lt;kafka&gt;&lt;应用场景&gt;&lt;Kafka VS Flume&gt;
  17. npm 切换淘宝源
  18. Codeforces Round #513 by Barcelona Bootcamp
  19. 「Python-Django」django 实现将本地图片存入数据库,并能显示在web上
  20. nagios(centreon)监控Linux日志

热门文章

  1. Redis5设计与源码分析读后感(一)认识Redis
  2. shiro-重写标签功能----shiro:hasPermission 标签重写
  3. Laravel驱动管理类Manager的分析和使用
  4. Depthwise Separable Convolution(深度可分离卷积)的实现方式
  5. Processing 状态量控制动画技巧
  6. Combine 框架,从0到1 —— 5.Combine 中的 Subjects
  7. modelviewset settings 配置
  8. Docker操作命令——查看、停止、删除容器
  9. 037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构
  10. Arduino 串口的一些高级用法