本系列文章主要对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的更多相关文章

  1. 「 深入浅出 」集合Map

    系列文章: 「 深入浅出 」java集合Collection和Map 「 深入浅出 」集合List 「 深入浅出 」集合Set 前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍M ...

  2. 「 深入浅出 」集合Set

    系列文章 「 深入浅出 」集合List 「 深入浅出 」java集合Collection和Map Set继承自Collection接口,不能包含有重复元素.本篇文章主要讲Set中三个比较重要的实现类: ...

  3. 「 深入浅出 」集合List

    第一篇文章 「 深入浅出 」java集合Collection和Map 主要讲了对集合的整体介绍,本篇文章主要讲List相对于Collection新增的一些重要功能以及其重要子类ArrayList.Li ...

  4. Java 集合系列 15 Map总结

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  5. Java 集合系列 08 Map架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  7. Java集合框架之map

    Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...

  8. Java集合 Collection、Set、Map、泛型 简要笔记

    集合 什么是集合 概念 对象的容器,实现了对对象常用的操作 和数组的区别 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型 位置 java.util.*; Colle ...

  9. 5、数组和集合--Collection、Map

    一.数组:同一个类型数据的集合,其实他也是一个容器 1.数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据 2.数组的定义: 在Java中常见: 格式1:  类型 [] 数组名 = ne ...

随机推荐

  1. ios设备iframe无法滚动

    在使用IFRAME,你需要使用一个元素(如DIV)来包装他们 <div class="scroll-wrapper"> <iframe src="&qu ...

  2. pytorch中DataLoader, DataSet, Sampler之间的关系

    转自:https://mp.weixin.qq.com/s/RTv0cUWvc0kuXBeNoXVu_A 自上而下理解三者关系 首先我们看一下DataLoader.__next__的源代码长什么样,为 ...

  3. TestStand 基本设置

    1. 过程模型设置 菜单->Configure->Station Options->Model TestStand 默认提供了三种过程模型 Sequential.Batch.Para ...

  4. Unity3D小游戏开发之两个我踩过的坑

    最近在开发一个植物大战僵尸小游戏,今天写了一早上的代码,踩了两个坑,这两个坑的位置分别位于触发器和数据转换,写这篇博文以此来让其他程序员不要再去踩这两个坑. 1.我在做简易僵尸模型的时候,这个僵尸模型 ...

  5. JVM系列(三):java的垃圾回收机制

    java垃圾回收机制介绍    上一篇讲述了JVM的内存模型,了解了到了绝大部分的对象是分配在堆上面的,我们在编码的时候并没有显示的指明哪些对象需要回收,但是程序在运行的过程中是会一直创建对象的,之所 ...

  6. Mybatis是如何实现SQL防注入的

    Mybatis这个框架在日常开发中用的很多,比如面试中经常有一个问题:$和#的区别,它们的区别是使用#可以防止SQL注入,今天就来看一下它是如何实现SQL注入的. 什么是SQL注入 在讨论怎么实现之前 ...

  7. Activity启动过程源码分析(Android 8.0)

    Activity启动过程源码分析 本文来Activity的启动流程,一般我们都是通过startActivity或startActivityForResult来启动目标activity,那么我们就由此出 ...

  8. React Native 性能优化指南【全网最全,值得收藏】

    2020 年谈 React Native,在日新月异的前端圈,可能算比较另类了.文章动笔之前我也犹豫过,但是想到写技术文章又不是赶时髦,啥新潮写啥,所以还是动笔写了这篇 React Native 性能 ...

  9. js原生深拷贝

    /*****************************************************************************************/ 原生js实现深拷 ...

  10. Angular.的简单运用

    从script引用angular文件.开始编写angular事件: 在angular文件中添加属性: ag-xxxx;初始化使用: ng-app="name"; 没有这个属性就不会 ...