「 深入浅出 」java集合Collection和Map
本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解。
本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set,List,Queue。
什么是集合
Java集合类存放于 java.util 包中,是一个用来存放对象的容器。
集合有以下几个特点:
①集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的。
②集合存放的是对象的引用,对象本身还是放在堆内存中。
③集合可以存放不同类型,不限数量的数据类型。
集合和数组的区别
1.数组长度需初始化时指定长度,只能保存定长的数据;而集合可以保存数量不确定的数据。
2.数组可以存基本类型,也可以是对象;
集合里只能保存对象(实际上保存对象的引用变量)。
Java集合介绍
主要分为Collection接口和Map接口,Collection接口有3个主要的接口List,Set,Queue
整体框架如下:
图源于网络
迭代接口Iterator
所有的集合类都实现了Iterator接口,这是一个用于遍历集合中元素的接口
所包含方法如下:
Collection接口
Collection接口是处理对象集合的根接口,其中定义了很多对元素进行操作的方法,框架图中的AbstractCollection提供Collection部分实现的抽象类。
Collection接口中的所有方法
其中比较常用的方法如下
add(E) 添加一个元素到集合中
addAll(Collection) 将指定集合中的所有元素添加到集合中
remove(Object) 删除一个元素
contains(Collection) 方法检测集合中是否包含指定的元素
toArray() 方法返回一个表示集合的数组
Collection三个子接口
Collection的常用方法,在子接口中同样常用,下面不再重复说明
1.List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
List接口中的所有方法
其中主要比较常用的方法如下
get(int) 获取元素
set(int, E) 设置元素到某个索引位置
add(int, E) 添加元素到某个索引位置
add(int, E) 删除某个索引位置元素
sort(Comparator) 排序
2.Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
List接口中的全部方法
Set只继承了Collection,并没有添加自己的方法,所以常用方法与Collection一样
3.Queue(有序、可重复、先进先出、不可随机访问)
队列是“先进先出”容器。插入新元素只能添加到队列的尾部,获取或删除元素只能是队列头部的元素。
Queue中的所有方法
需要注意的是,新增、检索、删除都分别提供了两种方法,请注意一下它们的区别
4.Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,提供key(键)到value(值)的映射,键不能重复,值可以重复。
Map的所有方法如下图
常用方法如下:
get(Object) 获取元素
put(K, V) 添加元素
remove(K) 删除元素
entrySet() 获取Entry集合,一般用于遍历Map里的元素
Map中还包括一个内部类Entry,该类封装了一个key-value对。Map内部存储是通过Entry进行存储的。 Entry包含如下三个方法:
List、Set、Map的区别
1.继承
List和Set继承Collection接口,而Map不是
2.重复性:
① List允许有重复的元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到List集合中;
② Set集合不允许元素重复。Set以及所有实现了Set接口的类都不允许重复值的插入,若多次插入同一个元素时,在该集合中只显示一个;
③ Map以键值对的形式对元素进行存储。Map不允许有重复键,但允许有不同键对应的重复的值;
3.有序性:
① List及其所有实现类保持了每个元素的插入顺序;
② Set中的元素都是无序的;但是某些Set的实现类以某种殊形式对其中的元素进行排序,如:LinkedHashSet按照元素的插入顺序进行排序;
③ Map跟Set一样对元素进行无序存储,但其某些实现类对元素进行了排序。如:TreeMap根据键对其中的元素进行升序排序;
4.空值(Null)问题:
① List允许任意数量的空值(Null)
② Set最多允许出现一个空值(Null)(因为Set集合不允许元素重复,实际可上重复插入空值(Null))
③ Map只允许出现一个空键(Null),但允许出现任意数量的空值(Null)
总结:
List中的元素,有序、可重复、任意空值
Set中的元素,无序、不重复、只有一个空元素
Map中的元素,无序、键不重,值可重、可一个空键,多可空值
以上是java集合框架的概括内容,通过这篇文章主要了解一些基本的概念以及对集合的操作方法。
后续文章将对java集合中的具体实现类进行深入了解。有兴趣的话可以观看后续内容,进一步了解java集合内容。
「 深入浅出 」java集合Collection和Map的更多相关文章
- 「 深入浅出 」集合Map
系列文章: 「 深入浅出 」java集合Collection和Map 「 深入浅出 」集合List 「 深入浅出 」集合Set 前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍M ...
- 「 深入浅出 」集合Set
系列文章 「 深入浅出 」集合List 「 深入浅出 」java集合Collection和Map Set继承自Collection接口,不能包含有重复元素.本篇文章主要讲Set中三个比较重要的实现类: ...
- 「 深入浅出 」集合List
第一篇文章 「 深入浅出 」java集合Collection和Map 主要讲了对集合的整体介绍,本篇文章主要讲List相对于Collection新增的一些重要功能以及其重要子类ArrayList.Li ...
- Java 集合系列 15 Map总结
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 08 Map架构
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java集合框架之Map接口浅析
Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...
- Java集合框架之map
Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...
- Java集合 Collection、Set、Map、泛型 简要笔记
集合 什么是集合 概念 对象的容器,实现了对对象常用的操作 和数组的区别 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型 位置 java.util.*; Colle ...
- 5、数组和集合--Collection、Map
一.数组:同一个类型数据的集合,其实他也是一个容器 1.数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据 2.数组的定义: 在Java中常见: 格式1: 类型 [] 数组名 = ne ...
随机推荐
- Linux 内核PC/104 和 PC/104+
当前在工业世界中, 2 个总线体系是非常时髦的: PC/104 和 PC/104+. 2 个在 PC-类 的 单板计算机中都是标准的. 2 个标准都是印刷电路板的特殊形式, 包括板互连的电子的/机械的 ...
- Jquery xhr2跨域
相关享目托管在github: https://github.com/devgis/CSharpCodes
- linux_jdk,zookeeper,kafka安装
若是在虚拟机安装最好先进行下面的安装 1.1修改各个虚拟机主机名 vi /etc/sysconfig/network 1.2修改主机名和IP的映射关系 vi /etc/hosts 1.3关闭防火墙 # ...
- char* 、const char*和string之间的转换
1. const char* 和string 转换 (1) const char*转换为 string,直接赋值即可. EX: const char* tmp = "tsinghua ...
- 深入浅出ES6的标准内置对象Proxy
Proxy是ES6规范定义的标准内置对象,可以对目标对象的读取.函数调用等操作进行拦截.一般来说,通过Proxy可以让目标对象"可控",比如是否能调用对象的某个方法,能否往对象添加 ...
- 前端Tips#2 - 将 arguments 转换成Array的最佳实践
本文同步自 JSCON简时空 - 技术博客,点击阅读 视频讲解 文字讲解 1.先讲结论 有很多种方式将 arguments 转换成数组,那么哪一种方式是最优的? 为节约大伙儿的时间,这里先说一下结论: ...
- $cometoj\#4\ D\ $求和 不是$dp$
\(Des\) \(Sol\) \(upd:\)以下两段是错误做法,但我不想删掉\(.jpg\) -----------------------以下是错误部分--------------------- ...
- 洛谷P1220 关路灯 题解 区间DP
题目链接:https://www.luogu.com.cn/problem/P1220 本题涉及算法:区间DP. 我们一开始要做一些初始化操作,令: \(p[i]\) 表示第i个路灯的位置: \(w[ ...
- 「Luogu P3395」路障 解题报告
点开有惊喜 其实是题面 这D1T1给的很有面子! 我居然做的来! 从左上角走到右上角 然后n<=1000 所以果断放弃DFS,选择BFS 思路还是一样的BFS 证明: 走到一个点的时间越早越好( ...
- C++ 模板常见特性(函数模板、类模板)
背景 C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量. C++ 提高代码的可重用性主要有两方面: 继承 模板 继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的 ...