java刷题时常用容器详解
当初学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刷题时常用容器详解的更多相关文章
- Java刷题时常用的标准库数据结构和相应算法
目录 一.线性表(广义的数组) 1. 数组 一维数组的定义和初始化 二维数组的定义和初始化 Arrays工具类的一些常用方法 2. List接口容器 对象的构建 读写和插入删除数据 排序 反转数组 二 ...
- java程序运行时内存分配详解
java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下 一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...
- java程序运行时内存分配详解 (转)
转自:http://www.tuicool.com/articles/uU77v2 一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Ja ...
- Java 虚拟机运行时数据区详解
本文摘自深入理解 Java 虚拟机第三版 概述 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟 ...
- Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解
Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...
- Java程序设计(2021春)——第四章接口与多态课后题(选择题+编程题)答案与详解
Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 第四章选择题 4.0 ...
- Java程序设计(2021春)——第二章课后题(选择题+编程题)答案与详解
Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 第二章选择题 2.1 面向对象方法的特性 ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- (7)Java数据结构--集合map,set,list详解
MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...
随机推荐
- hystrix总结之缓存
通过实现HystrixCommand或者HystrixObservableCommand的getCacheKey方法,可以启动缓存. public class CommandUsingRequestC ...
- 二分类问题 - 【老鱼学tensorflow2】
什么是二分类问题? 二分类问题就是最终的结果只有好或坏这样的一个输出. 比如,这是好的,那是坏的.这个就是二分类的问题. 我们以一个电影评论作为例子来进行.我们对某部电影评论的文字内容为好评和差评. ...
- 【JAVA】JAVA相关知识点收集
下面这些链接都是我这段时间(7月-9月)看过的.感觉自己现在处于一个疯狂吸收知识的阶段,如果是文字的方式一点一点搬运到自己的博客既重复又费时间,只有等自己积累到一定程度后才能进行原创性高质量的产出吧. ...
- Java Web学习(二)数据加密
一.Tomcat 体系 首先通过一幅图来了解下tomcat的运行体系: Tomcat服务器的启动是基于一个server.xml文件的. 启动流程: 首先启动一个Server,Server里面就会启动S ...
- 极简 Node.js 入门 - 4.2 初识 stream
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- Markdown 1.0.1
简介 Markdown 是由 John Gruber 于2004年开发一种轻量级标记语言,它是一个面向web作者的 text-to-HTML 转换工具.Markdown编辑器允许您使用纯文本格式编写, ...
- 基于GAN的特征抽取 Feature Extraction by GAN
InfoGAN 期望的是 input 的每一个维度都能表示输出数据的某种特征.但实际改变输入的一个特定维度取值,很难发现输出数据随之改变的规律. InfoGAN 就是想解决这个问题.在 GAN 结构以 ...
- 007 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 01 Java标识符
007 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 01 Java标识符 Java变量与常量主要内容 Java变量与常量主要内容如下,主要是对以下内容的学习,没 ...
- matlab中figure 创建图窗窗口
来源:https://ww2.mathworks.cn/help/matlab/ref/figure.html?searchHighlight=figure&s_tid=doc_srchtit ...
- CPU 执行程序的秘密,藏在了这 15 张图里
前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电 ...