当初学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()返回第一个元素并删除

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

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

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

java刷题时常用容器详解的更多相关文章

  1. Java刷题时常用的标准库数据结构和相应算法

    目录 一.线性表(广义的数组) 1. 数组 一维数组的定义和初始化 二维数组的定义和初始化 Arrays工具类的一些常用方法 2. List接口容器 对象的构建 读写和插入删除数据 排序 反转数组 二 ...

  2. java程序运行时内存分配详解

    java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下   一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...

  3. java程序运行时内存分配详解 (转)

    转自:http://www.tuicool.com/articles/uU77v2 一.  基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Ja ...

  4. Java 虚拟机运行时数据区详解

    本文摘自深入理解 Java 虚拟机第三版 概述 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟 ...

  5. Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...

  6. Java程序设计(2021春)——第四章接口与多态课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 第四章选择题 4.0 ...

  7. Java程序设计(2021春)——第二章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 第二章选择题 2.1 面向对象方法的特性 ...

  8. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  9. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

随机推荐

  1. 深入研究RocketMQ生产者发送消息的底层原理

    前言 hello,小伙伴们,王子又来和大家研究RocketMQ的原理了,之前的文章RocketMQ生产部署架构如何设计中,我们已经简单的聊过了生产者是如何发送消息给Broker的. 我们简单回顾一下这 ...

  2. Cesium系统学习整理(一)

    (一)Cesium的概念定义 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的 ...

  3. RestTemplate get请求多参数 简单封装

    使用RestTemplate发送get请求时,如果有多个参数拼接起来会比较麻烦,在此做个简单的封装 public static void main(String[] args) { Map<St ...

  4. 第一次面试linux后台岗位

    今天给大家分享前段时间面试linux后台的面试题目,我从里面挑了几道大家比较陌生的题目,而且要那种手写代码的题目,这方面肯定很多人在实际面试时最怕的题目! 1.请说出如何用tcp服务实现文件的断点续传 ...

  5. C++里的程序 GetDlgItem(IDC_EDIT_INPUTFILE) ->EnableWindow(TRUE)

    转载:https://zhidao.baidu.com/question/654519209423407765.html GetDlgItem(IDC_EDIT_INPUTFILE) ->Ena ...

  6. HTML & CSS & JavaScript 从一个表格到一个灰阶颜色表 02

    工具1:HBuilder X 1.9.9.20190522 工具2:火狐浏览器 67.0.4 (64 位) 其实,我想使用表格,做一个这样的颜色表,如下图所示: 例 3:我们参照上图,基于上一个例子, ...

  7. Java面试题系列 ----- Java基础面试题(91道)

    更多详情点击查看,点这里!这里!!这里!!! 文末获取所有面试PDF文档! Java概述 1. 何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 为了 ...

  8. Android和。net加密。

    来源: Github: https://github.com/Pavel-Durov/CodeProject-Android-and-NET-Encryption 直接: Source Code (A ...

  9. 2. 在TCGA中找到并下载意向数据

    听说过别人用生信分析"空手套白狼"的故事吧想做吗好想学哦~ 或多或少都知道GEO和TCGA这些公共数据库吧!那么你知道怎么在数据库上找到意向数据,并且成功下载呢?这第一步要难倒一大 ...

  10. 多测师讲解rf _基本使用002_高级讲师肖sir

      在你安装好RF-ride之后,桌面就会生成一个RIDE图标.双击启动,界面如下: