JAVA基础(3)——容器(1)——常用容器分类

JAVA基础(4)——容器(2)——普通容器 1. ListVector从Vector源码看: Vector自jdk1.0出现。 Vector继承AbstractList,实现了List、RandomAccess、Cloneable、Serializable。 Vector内部维护着protected Object[] elementData,会序列化整个数组,包括未存储数据的区域。 Vector初始容量为10,容量是动态变化的,容量增长为(( 阅读详情

JAVA基础系列规划:


从元素存储的角度看,容器是存储元素的单元,这样来看,数据类型都是容器。在这里,遵从jdk的定义,将容器定义为jvm持有对象的单元。Java类库提供了一套相当完整的容器类,使用这些类的方法可以保存和操纵对象。以下内容基于jdk1.8。

1. 常用容器分类

这里写图片描述

(图片来自网络,已忘记出处,见谅)

  • 在这里,集合类分为了Map和Collection两个大的类别。
  • 图片左上角的那一块灰色里面的四个类(Dictionary、HashTable、Vector、Stack)都是线程安全的,但是它们都是JDK的老的遗留类,现在基本都不怎么使用了,都有了对应的取代类。其中Map是用来代替图片中左上角的那个Dictionary抽象类(Map的官方文档里面有说明)。官方推荐使用Map接口来代替它。同样对于HashTable,官方推荐ConcurrentHashMap来代替。接着下面的Vector是List下面的一个实现类。
  • 图片最上面的粉红色部分是集合类所有接口关系图。其中Map的结构比较简单,而Collection的结构就相对复杂一些。Collection有三个继承接口:List、Queue和Set。
  • 接下来绿色部分则是集合类的主要实现类了。这也是我们最经常使用的集合类了。
  • 最下方的一个整块都是java.util.concurrent包里面的类,按照包名我们就可以知道这个包里面的类都是用来处理Java编程中各种并发场景的

按照实现接口分类

  • 实现Map接口的有:EnumMap、IdentityHashMap、HashMap、LinkedHashMap、WeakHashMap、TreeMap
  • 实现List接口的有:ArrayList、LinkedList
  • 实现Set接口的有:HashSet、LinkedHashSet、TreeSet
  • 实现Queue接口的有:PriorityQueue、LinkedList、ArrayQueue

根据底层实现的数据结构分类

  • 底层以数组的形式实现:EnumMap、ArrayList、ArrayQueue
  • 底层以链表的形式实现:LinkedHashSet、LinkedList、LinkedHashMap
  • 底层以hash table的形式实现:HashMap、HashSet、LinkedHashMap、LinkedHashSet、WeakHashMap、IdentityHashMap
  • 底层以红黑树的形式实现:TreeMap、TreeSet
  • 底层以二叉堆的形式实现:PriorityQueue

并发容器

  • ConcurrentHashMap、ConcurrentSkipListHashMap
  • LinkedTransferQueue、CopyOnWriteArrayList、ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、LinkedBlockDeque、DelayQueue、SynchronusQueue
  • ConcurrentSkipListSet、CopyOnWriteArraySet

2. Collection

Collection源自jdk1.2,是collection的根接口,collection代表着一组对象,这组对象就是collection的元素。

public interface Collection<E> extends Iterable<E>

在Collection接口中描述了collection操作的通用操作size、isEmpty、contains、iterator、toArray、add、remove、containsAll、addAll、removeAll、retainAll、clear、equals、hashCode,这些方法都是实现类需要实现的。jdk1.8添加了已实现的default方法removeIf、spliterator、stream、parallelStream。

关于default方法

jdk1.8开始,接口中可以添加已实现的方法,这种方法叫default方法。default方法的含义是当一个类实现一个接口的时候,它可以实现接口中的default方法,但这不是必须的。多继承时,default方法名和其他接口中方法名相同时,必须在实现类中实现该方法名的方法。

Iterable接口从jdk1.5出现,描述了遍历的通用操作iterator,同时在jdk1.8添加了default方法forEach、spliterator。

jdk并不提供对Collection的直接实现,而是对Collection进行了细分,提供更加细化的子接口List、Queue、Set。

2.1 List容器接口

List中的数据有序且可以重复,可随机存取数据。其接口:

public interface List<E> extends Collection<E>

描述了方法:

add(E): boolean
add(int, E): void
addAll(Collection<? extends E>): boolean
addAll(int, Collection<? extends E>): boolean
clear(): void
contains(Object): boolean
containsAll(Collection<?>): boolean
equals(Object): boolean
get(int): E
hashCode(): int
indexOf(Object): int
isEmpty(): boolean
iterator(): Iterator<E>
lastIndexOf(Object): int
listIterator(): ListIterator<E>
listIterator(int): ListIterator<E>
remove(int): E
remove(Object): boolean
removeAll(Collection<?>): boolean
replaceAll(UnaryOperator<E>): void
retainAll(Collection<?>): boolean
set(int, E): E
size(): int
sort(Comparator<? super E>): void
spliterator(): Spliterator<E>
subList(int, int): List<E>
toArray(): Object[]
toArray(T[]): T[]

2.2 Queue容器接口

Queue是先进先出的队列接口:

public interface Queue<E> extends Collection<E>

描述了方法:

add(E): boolean
element(): E
offer(E): boolean
peek(): E
poll(): E
remove(): E

为了更清晰的表达Queue的语义,存在一些和Collection重复的定义。

2.3 Set容器接口

Set是无序集合的接口:

public interface Set<E> extends Collection<E>

描述了方法:

add(E): boolean
addAll(Collection<? extends E>): boolean
clear(): void
contains(Object): boolean
containsAll(Collection<?>): boolean
equals(Object): boolean
hashCode(): int
isEmpty(): boolean
iterator(): Iterator<E>
remove(Object): boolean
removeAll(Collection<?>): boolean
retainAll(Collection<?>): boolean
size(): int
spliterator(): Spliterator<E>
toArray(): Object[]
toArray(T[]): T[]

3. Map

Map是Map层级结构中的根接口,维护键/值对,描述不重复的一对一的键到值的映射。
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
将可变对象用作映射键时必须格外小心,最好不要这样使用。

其接口为:

public interface Map<K,V>

主要描述映射关系的操作:

clear(): void
compute(K, BiFunction<? super K, ? super V, ? extends V>): V
computeIfAbsent(K, Function<? super K, ? extends V>): V
computeIfPresent(K, BiFunction<? super K, ? super V, ? extends V>): V
containsKey(Object): boolean
containsValue(Object): boolean
entrySet(): Set<Entry<K, V>>
equals(Object): boolean
forEach(BiConsumer<? super K, ? super V>): void
get(Object): V
getOrDefault(Object, V): V
hashCode(): int
isEmpty(): boolean
keySet(): Set<K>
merge(K, V, BiFunction<? super V, ? super V, ? extends V>): V
put(K, V): V
putAll(Map<? extends K, ? extends V>): void
putIfAbsent(K, V): V
remove(Object): V
remove(Object, Object): boolean
replace(K, V): V
replace(K, V, V): boolean
replaceAll(BiFunction<? super K, ? super V, ? extends V>): void
size(): int
values(): Collection<V>

4. Collections

Collections是容器工具类,主要提供一些排序算法。如:

List list = new ArrayList(); …
Collections.sort(list);//顺序排序
Collections.shuffle(list);//乱序
Collections.reverse(list);//逆序
Collections.binarySearch(list, obj);//二分查找返回obj在list中的位置
纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理 分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。 阅读详情

相关推荐

双层优化入门(1)—基本原理与求解方法(附matlab代码)

双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。

配电网和matlab的博客 5万+

Java集合类是Iterable的实现类的原因

Iterator和Iterable都是接口。 好多集合类,比如List一族或者Set一族,都实现了Iterable接口,这样对象就可以调用iterator()方法。 一般都是结合着用,比如 HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样:HashMap hashMap; Iterator iter = hashMap.i

许湘扬的博客 7823

Windows下Nginx发布DEM地形瓦片数据全流程(含Cesium调用避坑指南)

本文详细介绍了在Windows环境下使用Nginx发布DEM地形瓦片数据的完整流程,并提供了Cesium前端调用的详细配置与避坑指南。重点讲解了Nginx的核心配置、跨域问题解决以及CesiumTerrainProvider的关键参数设置,帮助开发者快速搭建本地地形服务,实现高效的三维地形可视化。

weixin_29212867的博客 433

Java中常用容器类

1.什么是容器? 1.专门用来存放其它类的对象的一种类,这种类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体。 2.在Java容器中一共定义了两种集合, 顶层接口分别是Collection和Map。但是这两个接口都不能直接被实现使用,分别代表两种不同类型的容器。 3.Collection是独立元素的序列,这些元素都服从一条或多条规则。List、Set以及Queue都是Collection的一种,List必须按照顺序保存元素,而Set不能有重复元素,Queue需要按

m0_46692607的博客 2911

Xftp卸载报错1628终极解决指南:深入解析InstallShield残留问题

本文深入解析了Xftp卸载时遇到的1628错误,其根源在于InstallShield安装引擎的残留问题。文章提供了从手动清理注册表项到彻底删除隐藏安装备份文件夹的完整解决方案,并给出了防患于未然的实用建议,帮助用户彻底解决这一经典安装报错。

weixin_29276847的博客 335

【DaVinci Configurator专题】-5-通过Data Mapping自动创建CAN信号关联的Port并添加到APP SWC

目录 1 导入CAN Matrix变更后的Arxml文件 2 自动创建CAN信号关联的APP Port 3 CAN信号与App SWC的接口映射/连接 4 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: DaVinci Developer DaVinci Configurator Pro ARXML AUTOSAR System Description Network Explorer 1

「汽车电子助手」的博客 5126

MybatisPlus:泛型方法使用 default <V> List<V> listObjs(Function<? super Object, V> mapper)

default List listObjs(Function<? super Object, V> mapper) 首先 我们先看到的这个方法入参是:Function<? super Object , V> mapper ,这是jdk1.8为了统一简化书写格式引进的函数式接口 。 简单 解释一下我对Function函数的理解 , 就以上面的写法为例,可以看到Function函数要传入两个类型: 1. ? super Object 这个类型限制了下限 , 即 传入的类型必

GottaHaveYou 2万+

4、基于球面波展开的近场/远场变换技术解析

本文深入解析了基于球面波展开的近场/远场变换技术,涵盖坐标系统选择、截断测量处理、高级SWE方法及实际应用场景。重点介绍了广义SWE、全探头补偿、平移SNF测量(TSWE)等关键技术,结合吸收材料与导电地板系统的误差处理方案,系统总结了各类方法的优缺点与适用场景,并通过流程图和案例分析展示了技术应用路径。该技术在汽车、通信和航空航天领域的天线测量中具有重要价值,可显著提升测量效率与精度。

dell8的博客 254

四种容器类型

四种容器类型 容器(collection) 变量 = 值 一般编程语言都会设计存储多个值的存储方式(类似于C语言里的数组) 容器分为四种类型: |-- list 列表 链表的实现(将几块不连续的内存联系起来) |-- set 集合 |-- tuple 元组 |-- dict 字典 1. 列表(list): 是一种链表的实现。 |-- 列表的定义(可以存储任意类型,不止数字)(可以为空) ...

qq_43777930的博客 4499

Temporal Noise Reduction(TNR)时序去噪技术解析:原理、平台实践与工程调优路径

随着高画质夜景拍照和高清视频拍摄需求的持续增长,图像传感器在低照度环境下输出信号的噪声问题日益突出。相比空间域降噪(SNR),时序去噪(Temporal Noise Reduction, TNR)利用帧间信息进行融合处理,具备更高的信噪比提升效率及更强的边缘保护能力,已成为移动影像ISP链路中的核心环节。本文系统剖析TNR的算法原理、平台实现机制与工程调试路径,并基于实际开发案例分析其在不同场景下的效果差异及调优方法,为工程师提供从理论到实操的完整路径参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3197

Codex 100个真实案例 - 用AI生成建筑平面图SVG(室内设计师的新武器)

本案例用 Codex 生成一套完整的 Python 脚本,自动绘制 SVG 格式的建筑平面图。我们会设计一个90平两室一厅的户型——客厅、主卧、次卧、厨房、卫生间一应俱全,还会自动摆放家具(沙发、床、餐桌、橱柜)、标注尺寸和面积、绘制水电路走向、生成多种配色方案。最终输出的 SVG 文件可以直接用浏览器打开展示,也可以转成 PNG 交给客户。室内设计师看了都说好!

yueyeguzhuo的专栏 757

容器的种类及定义

Docker容器是一种轻量级、可移植的软件打包和分发解决方案。它使用操作系统级的虚拟化技术,将应用程序及其所有依赖项封装到一个容器中。

AIBB_520的博客 2043

PyTorch强化学习实战(3)——Gymnasium API扩展功能

我们已经学习了编写智能体必需的 Gymnasium 核心功能,其余 API 功能部分虽然非必需,但能显著提升开发效率和代码整洁度。在本节中,我们简要地介绍了 Gymnasium API 的扩展功能,学习了如何以模块化的方式扩展现有环境的功能,并熟悉了使用包装器可视化智能体活动的方法。

盼小辉丶的博客 1190

【Java基础系列】- 数组、常用类和容器

int size()装了多少元素清空是否包含(传的参数equals容器内某对象)添加一个删除一个用于对集合内元素进行迭代访问包含全部添加全部删除c在容器内全部求交集把容器内对象全转换为对象类型的数组。

m0_68383079的博客 2103

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java基础——GUI——Swing中常用容器和组件

1.swing中常用容器 (1)JFrame 常用方法: 1.构造方法: 2.设置窗体可见: 3.设置点击窗体的执行的操作:. 4.设置窗体的大小和位置 等价于上面两个方法 不管窗体多大,窗体运行起来都会出现在屏幕的中心 5.获取窗体容器:在容器中添加和删除组件: 做完添加和删除之后最好刷新容器: ...

波波鱼的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java常用容器基础操作汇总

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

starhyacinth的博客 900

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java Web容器分类及对比

Java Web容器分类及对比

爱的叹息的专栏 1455

Java基础——十二、容器

Map是 Java 中处理键值对数据的核心接口。选择合适的Map实现类是关键:如果需要快速查找,使用HashMap;如果需要顺序或排序,选择或TreeMap;在多线程环境中,使用。和 Collection定义了集合操作的基本能力和遍历方法。List进一步扩展了集合,支持有序、可重复的元素列表操作。和 AbstractList提供了集合的骨架实现,减少了开发者重复实现基础功能的工作量。是标识接口,表明支持高效随机访问。Cloneable和 Serializable。

qq_51936245的博客 3199

Java 容器详解—— 常用容器类入门

在 Java 编程中,容器(Container)是用来存储和管理多个对象的结构。Java 提供了一套功能强大的容器类库 ——,位于java.util包中。List是一个有序的集合,允许元素重复,并可以通过索引访问。实现一个字符串栈,支持基本的入栈 (push) 和出栈 (pop) 操作。Java 容器是 Java 编程中最基础也最重要的部分之一。通过合理使用ListSet和Map,我们可以高效地处理各种数据结构问题。同时,学会查阅官方 API 文档,也是提升编程能力的重要一步。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 1762

Java中集合ArrayList、LinkedList以及HashMap常用容器详解及其区别

Java中容器对象主要用来存储其他对象,根据实现原理不同,主要有3类常用的容器对象

陈橘又青的博客 3313

Java中容器大全(Java基础篇)

Java中容器大全(Java基础篇)

二两清酒.的博客 4171

java常用容器概述

有序,可重复,有索引有序:指的是数据存入集合的顺序和取出集合的顺序是一致的,并不会给数据排序!**可重复:**List允许加入的数据是重复的.更确切的讲,list允许 e1.equals(e2)为true的两个数据添加.Set接口继承自Collection接口,Set接口中没有新增方法(没有自己特有的方法,全是继承collection),它和Collection接口保持完全一致。我们在前面学习List接口的使用方式,在Set中仍然适用。因此,学习Set的使用将没有任何难度。

m0_69120220的博客 1686

Java容器及其常用方法汇总

1 概述 Java Collections 框架中包含了大量的接口及其实现类和操作它们的算法,主要包括列表(List)、集合(Set)、映射(Map),如下: List (按插入顺序保存对象,允许元素重复) (1)ArrayList:数组实现,初始大小默认为10,扩充1.5倍(向下取整),不够时采用需求值(如需初始为10,需求容量为16,扩容1.5倍为15,仍不够,此时将容量设置为...

little_fat_sheep 3623

JAVA中的容器分类以及结构介绍(JAVA基础)

Set 接口继承自 Collection,Set 接口中没有新增方法,方法和 Collection 保持完全一致。1 Set接口特点Set 特点:无序、不可重复。无序指 Set 中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切地讲,新元素如果和 Set 中某个元素通过 equals()方法对比为 true,则只能保留一个。2 HashSet 容器类HashSet 是一个没有重复元素的集合,不保证元素的顺序。而且 HashSet 允许有 null 元素。

m0_63025333的博客 1892

【java笔记】java中的常用容器

java容器 1. 常用容器 java容器分为两大部分:Collection和Map。Collection是单个元素的集合,又可以分为List、Queue和Set。Map用来存储一组键值对,又可以分为HashMap和TreeMap。 2. List列表 List的特点就是所有的元素是可以重复的。 (1) ArrayList ArrayList是一个可以动态增长的数组, ArrayList由于底层是使用数组实现的,所以随机访问速度快,插入删除较慢。 (2) LinkedList LinkedList是使用链

zuzhiang的博客 7295

Java容器类总结,容器分类架构图

Java容器类是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。从本文开始将开启一个系列详细分析Java容器中的每个成员,包括源代码分析,性能分析,不同容器之间对比等等,链接将同步更新在本文和置顶博文内。 Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Colle...

【小石头的茅坑】 71万+
上一篇: JAVA基础(12)——反射
下一篇: JAVA基础(4)——容器(2)——普通容器
白水不开
博客等级 码龄18年 91粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值