Java 基础之容器

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



一、Java Collections 框架是什么


     Java Collections 框架中包含了大量的集合接口以及这些接口的实现类和操作他们的算法(例如:排序、查找、反转、替换、复制、取最小元素、取最大元素等),具体而言,主要提供了 list(列表)、Queue(队列)、Set(集合)、Stack(栈)、和 Map(映射表,用于存放键值对)等数据结构,其中 List、Queue、Set、Stack 都继承自 Collection 接口


二、ArrayList、Vector 和 LinkedList 有什么区别?


ArrayList、Vector、LinkedList 类均在 java.util 包中,均为可伸缩数组,既可以动态改变长度的数组。

  • ArrayList 和 Vector 的区别

      ArrayList 与 Vector 最大的区别就是 synchronization(同步) 的使用,没有一个 ArrayList 的方法是同步的,而 Vector 的绝大多数方法(例如 add、insert、remove、set、equals、hashcode 等)都是直接或间接同步的,所以 Vector 是线程安全的,ArrayList 不是线程安全的,正是由于 Vector 提供了线程安全的机制,其性能上要略逊于 ArrayList

  • LinkedList 是采用双向列表来实现的,对数据的索引需要从列表头开始遍历,因此用于随机访问则效率比较低,但是插入元素时不需要对数据进行移动,因此,插入效率较高,同时 LinkedList 是非线程安全的容器。
  • 在实际使用中,如何在这几种容器中选择合适的使用?

      当对数据的主要操作为索引或只在集合的末端增加、删除元素时,使用 ArrayList 或 Vector 效率比较高,当对数据的操作主要为指定位置的插入或删除操作时,使用 LinkedList 效率比较高,当在多线程中使用容器时(即多个线程会同时访问容器),选用 Vector 较为安全。


三、HashMap、Hashtable、TreeMap 和 WeakHashMap 有哪些区别?


      Java 为数据结构中的映射定义了一个接口 java.util.Map,它包括3个实现类:HashMap、Hashtable、TreeMap。Map 是用来存储键值对的数据结构,在数组中通过数组下标来对其内容进行索引的,而在 Map 中则是通过对象来进行索引,用来索引的对象叫做 key,其对应的对象叫做 value。

HashMap 是最常用的一个 Map,它根据键的 HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,由于 HashMap 和 Hashtable 都采用了hash法进行索引,因此二者具有很多相似处,它们主要有如下一些区别。

  • HashMap 和 HashTable 的区别:

1)HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),它们都完成了 Map 接口,主要区别在于 HashMap 容许(null)键值 key(但需要注意最多只允许一条记录的键为 null,不容许多条记录的值为 null),而 Hashtable 不允许。

2)HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey,因为 contains 方法容易让人引起误解

3)HashTable 的方法时线程安全的,而 HashMap 不支持线程的同步,多以它不是线程安全的,在多个线程访问 HashTable 时,不需要开发人员对它进行同步,而对于 HashMap,开发人员必须提供额外的同步机制,多以就效率而言,HashMap 可能高于 HashTable

4)Hashtable 使用 Enumeration,HashMap 使用 Iterator。

5)HashMap 和 HashTable 采用的 hash/rehash 算法几乎都是一样的,所以性能不会有很大的差异

6)在 HashTable 中 hash 数组默认大小是 11,增加的方式是 old*2+1,在 HashMap 中,hash 数组的默认大小是 16,而一定是 2 的指数

7)hash 值的使用不同,HashTable 直接使用对象的 HashCode

      以上 3 中类型,使用最多的是 HashMap,HashMap 里面存入的键值对在取出时没有固定的顺序,是随机的,一般而言,在 Map 中插入、删除和定位元素,HashMap 是最好的选择,由于 TreeMap 实现了 SortMap 接口,能够把它保存的键进行排序,因此取出来的是排序后的键值对,所以如果需要按自然顺序或自定义顺序遍历键,那么 TreeMap 会更好,LinkedHashMap 是 HashMap 的一个子类,如果需要输出的顺序和输入的相同,那么用 LinkedHashMap 可以实现,它还可以按读取顺序来排序

  • WeakHashMap 与 HashMap 区别

     WeakHashMap 与 HashMap 类似,二者的不同之处在于 WeakHashMap 中 key 采用的是“弱引用”的方式,只要 WeakHashMap 中的 key 不再被外部引用,它就可以被垃圾回收器引用,而 HashMap 中 key 采用的是“强引用的方式”当 HashMap 中的 Key 没有被外部引用时,只有在这个 Key 从 HashMap 中删除后,才可以被垃圾回收器回收

  • 在 HashTable 上下文中,同步指的是什么?

同步意味着在一个时间点只能有一个线程可以修改 hash 表,任何线程在执行 Hashtable 的更新操作前都需要获取对象锁,其他线程则等待锁的释放

  • 如何实现 HashMap 的同步?

HashMap 可以通过 Map m = Collection.synchronizedMap(new HashMap())来达到同步的效果,具体而言,该方法返回一个同步的 Map,该 Map 封装了层的 HashMap 的所有方法,使得底层的 HashMap 即使在多线程环境中也是安全的

  • 用自定义类型作为 HashMap 或 HashTable 的 key 需要注意哪些问题?

HashMap 与 HashTable 是用来存放键值对的一种容器,在使用这两个容器时有一个限制:不能用来存储重复的键,也就是说,每个键只能有唯一映射一个值,当有重复的键时,不会创建新的映射关系,而会使用先前的键值


四、Collection 和 Collections 的区别


      Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,实现该接口的类主要有 List 和 Set,该接口的设计目标是为各种具体集合提供最大化的统一的集合方式

      Collections 是针对集合类的一个包装类,它提供一系列的静态方法以实现对各种集合的搜索、排序、线程安全化等操作,其中大多数方法都是用来处理线性表,Collections 类不能实现实例化,如同一个工具类,服务于 Collection 框架,若在使用 Collections 的方法时,对应的 Collection 为 null,则这些方法都会抛出 NullPointerException


Java编程基础教程:Java容器化技术 1.背景介绍 容器化是云原生开发中重要的一个方向。容器技术已经成为企业IT系统架构的一项基本技术,能够轻松应对快速变化的业务需求,并且可以更好地实现资源的隔离、弹性伸缩、动态分配等功能,使得应用部署更加简单、灵活、高效、安全。 在Java技术栈中,容器化技术主要指利用Docker或者其他工具将Java应用打包成一个标准的镜像,然后基于该镜 阅读详情

相关推荐

STM32驱动四位共阳极数码管实现高精度秒表计时器

本文详细介绍了如何使用STM32驱动四位共阳极数码管实现高精度秒表计时器。项目基于STM32F103C8T6最小系统板,通过定时器中断和GPIO控制,实现0.1秒精度的计时功能,并解析了共阳极数码管的动态扫描原理及按键消抖等关键技术。

n8m7b6v5c4的博客 951

Java——第八章(集合类)

讲到集合,大家可能不会很陌生,集合就是用来存放对象的引用,例如选课系统,你得知道里面有什么可以选的课程,那么这些选的课程就被放在了一个集合当中,而每一个对象又有各自的属性。。在讲之前先看一张类图,更容易理解大体内容:这是java集合类的体系图,很容易看出,Collection类和Map类一丁点关系都没有,很多人在学的时候会混淆这两个之间有什么关系,要清楚这一点。Collection类是存放单对象元素

Li_peilun的博客 707

电流采样(分流器与霍尔传感器)

霍尔效应霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。简单原理如图1所示,半导体薄片两端通以控制电流I,垂直方向施加磁感应强度为B的匀强磁场,d为半导体材料的厚度,k为霍尔常数,它与半导体材质有关,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压,它们之间的关系为。霍尔元件。

weixin_48867130的博客 1万+

java用来存储键值的容器是_Java容器 - osc_y0caef0i的个人空间 - OSCHINA - 中文开源技术交流社区...

问题及答案来源自《Java程序员面试笔试宝典》第四章 Java基础知识 4.9容器1、Java Collections框架是什么?Java Collections框架中包含了大量集合接口以及这些接口的实现类和操作它们的算法(比如排序、查找、反转、替换等)具体而言主要提供了List(列表)、Queue(队列)、Set(集合)、Stack(栈)、Map(映射表)等数据结构其中List(列表)、Queu...

weixin_30548481的博客 419

告别ZotFile!Zotero 7+百度网盘文献同步全攻略(含软链接避坑指南)

本文针对Zotero 7用户,提供了告别ZotFile插件后,利用百度网盘实现文献附件同步的完整解决方案。详细讲解了如何通过设置Zotero链接目录与创建软链接,将附件库迁移至云盘,并附有详细的避坑指南,确保数据安全与多设备同步的稳定性。

mmm90的博客 586

告别理论!手把手教你用Patran/Nastran搞定悬臂翼的颤振分析(附完整模型文件)

本文提供了一份详细的Patran/Nastran悬臂翼颤振分析实战指南,涵盖从几何建模到结果解读的全过程。通过手把手教学和完整模型文件,帮助工程师和学生快速掌握气动弹性分析技术,特别适合需要实际操作的初学者。文章重点介绍了模态分析、气动建模和颤振求解等关键步骤,并提供了常见问题排查和优化建议。

weixin_30879169的博客 493

java中的map其实就是以键值对形式的存放数据的容器,其常用的实现类主要是哈希map

java中的map其实就是以键值对形式的存放数据的容器,其常用的实现类主要是哈希map public static void main(String[] args){ //定义Map<String, String> map = new HashMap(); map.put("id1", "wang");map.put("id2", "sheng"); //遍

running 6450

沐数科技数据开发岗笔试题2025

与数据库中的主键(Primary Key)​有所不同,业务主键(Business Key)​是业务层面的唯一标识,通常由业务规则决定,例如,订单号、订单明细号,身份证号等。用户授信表(table_credit):包含用户ID(uid)、授信申请时间(credit_submit_time_local)、授信状态(credit_status)。:在正态分布中,大约68%的数据值落在距离均值一个标准差的范围内,约95%的数据值落在两个标准差的范围内,而约99.7%的数据值落在三个标准差的范围内。

weixin_40121264的博客 3525

python中以键值对形式存放的容器-----------------字典(内有相关操作和示例代码)

#Filename:dictionary.py #字典类似于你通过联系人的名字查找详细的信息,也就是以 #键值对的形式存储,一个键对应一个值 #格式:key1:value1,key2:value2 #示例代码: #首先创建一个字典,以键值对的形式存在 dic={'1':'一', '2':'二', '3':'三', '4':'四' } #输入键获取相应的值 p...

逆水行舟,不进则退 5186

【智能车Code review】——环岛的判定与补线操作

【1】效果展示图 状态1、状态2 状态3 状态4、状态5 状态6 状态7 状态8 【2】状态机设定需要的参数 以右环岛为例: k_left:左线的斜率 rou_of_left:左线的方差 last_rou_of_left:上一帧的左线方差 l_start:左线第一行为黑的所在行 right_turn_down; right_turn_middle; right_turn_up; 左线的下、中、上拐点 fiv_width[i]:第i行的赛道宽度 leftline_du

hanhan的博客 2万+

RK3568平台(内存篇)DDR定频修改

如果需要DDR定频,则还需要注释掉其他多余的DDR频率,保留一个即可,例如注释掉opp-528000000、opp-1068000000、opp-1560000000,保留opp-2750000000则是定频最大频率。如果回退必须将 dmc_opp_table节点 的其他频率打开,否则系统无法选择到其他频率运行。ddr频点不对,先把ddr变频关掉,关闭后系统就不会一直重启了,以下是修改DDR频点的。rk3588修改定频节点在rk3588s.dtsi 的 dmc: dmc。

weixin_49303682的博客 1621

11、容器作业

容器作业 一、填空题 1.Java集合框架提供了一套性能优良、使用方便的接口和类,包括Collection和Map两大类,它们都位于__java.util___ 包中 2.队列和堆栈有些相似,不同之处在于 栈是先进后出,队列是先进先出 。 3. 链表 结构是一种由多个节点组成的线性数据结构,并且每个节点包含有数据以及指向下一个节点的引用。 4.LinkedList________是一种集合类,它 采用链表作为存储结构,便于删除和添加元素,但是按照索引查

友培的博客 963

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

m0_58523831的博客 1万+

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

从元素存储的角度看,容器是存储元素的单元,这样来看,数据类型都是容器。 在这里,遵从jdk的定义,将容器定义为jvm持有对象的单元。Java类库提供了一套相当完整的容器类,使用这些类的方法可以保存和操纵对象。常用容器如下表: (图片来自网络,已忘记出处,见谅) 以下内容基于jdk1.8。 在这里,集合类分为了Map和Collection两个大的类别。 图片左上角的那一块灰色里面的四个类(

Let it go 6266

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

二两清酒.的博客 4171

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java基础容器

LinkedHashMap 类提供了 removeEldestEntry 方法,在使用 put 操作插入 Entry 时将自动调用此方法决定是否移除双向链表表头的 Entry:默认返回 false ,可通过重写此方法以实现 LRU 算法。提供 iterator 方法,用来创建一个实现了 Iterator 接口的 iterator 对象:按容器类规定的顺序实现遍历集合。【数组双端队列】实现了 Deque 接口。在迭代元素的时候不能通过集合的方法修改或删除元素,但可以通过迭代器的 remove 方法删除元素。

2401_84881237的博客 1741

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java容器类基础

Java容器类基础 Java实用类库提供了一套相当完善的容器类,基本类型为List,Set,Map,Queue。它们都有一些特性,例如Set对于每一个值都只保存一个对象,Map允许你将对象和对象关联起来。此外,Java容器类都可以自动调节尺寸。因此,与数组不同,你可以放置任意数量的对象到容器中而不用担心容器应该设置为多大。 Java容器类有4个接口,它们分别上面提到过的List,Set

奋起的Coder。。。 1428

Java容器基础

一. 1.数组具有固定的大小; 2.容器类是List,set,Queue,Map,都可以自动调整自己的尺寸; 3.不用泛型 import java.util.ArrayList; public class CollectionDemo_00 { public static void main(String[] args) { ArrayList apples = new Arra...

kerlubasola 94

【Java】基础、容器、JVM、并发

文章目录参考基础1. 基本类型、包装类型、缓存池2. String、StringBuilder、StringBuffer,String Pool3. 引用传递还是值传递?4. ==、equals()、hashCode()5. 重写、重载、访问权限6. static关键字8. final关键字9. 反射10. 异常11.泛型12.IO容器1. ArrayList2. HashMap3. ConcurrentHashMap4. 其他并发JVM 参考 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版

Calcifer的博客 851

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

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

m0_68383079的博客 2109

java容器和基础类源码分析总结

目录 源码分析说明 基础类和接口源码分析 基本类 基本接口 函数式接口 工具类 java容器关系图 Collection的子类源码分析 Collection List Queue Set Map的子类源码分析 旧的容器类 源码分析说明 本次源码分析基本是基于JAVA_VERSION="1.8.0_112" 的jdk版本 在eclipse写jdk注释的方法是...

今天吃了吗的博客 837

java容器基础

总结一下学过的java容器知识。 一、java容器框架 由于之前学习的java容器类比较混乱,先简单的整理一下java集合框架。 首先,像这种图,网上到处都是,因为这个也算比较准确吧,我也懒得自己画了,因为我觉得这个目前对我来说不重要,这么多东西,并不是都用得到,其实日常写代码就只用到过几种,像最常用的ArrayList、HashMap等,在这里我只总结一些最基础的、常用的,希望对ja...

weixin_30748995的博客 130

Java常用容器基础操作汇总

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

starhyacinth的博客 900

JAVA基础之容器汇总

JAVA之容器汇总

@不胜寒 636

Java基础——十二、容器

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

qq_51936245的博客 3199

Java基础——容器

容器容器简介容器的结构单例集合collection接口接口介绍collection里面的抽象方法子接口list接口常用方法Arraylist容器类双例集合 容器简介 用来容纳和管理数据 把容器里面的数据存储在内存而不是磁盘上。 int i=10; 其实i就是一个容器不过只能存储一个数据 下一步可以用数组来存储多个相同类型的数据,但是数据使用不灵活,要指定长度 容器的结构 单例集合 将数据一个一个的进行存储。 list接口是有序存储,可重复,动态数组 set接口,存储无序,不可重复,相当于“集合”

sunbyte带你学 1472
上一篇: Android 全面解析 Handler 异步消息处理机制
下一篇: Java 基础之多线程
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值