HashMap,Hashset,ArrayList以及LinkedList集合的区别和用法

2024-05-30 02:48

本文主要是介绍HashMap,Hashset,ArrayList以及LinkedList集合的区别和用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Collection 
├List 
│├LinkedList 
│├ArrayList 
│└Vector 
│ └Stack 
└Set 
Map 
├Hashtable 
├HashMap 

└WeakHashMap

一、基础内容

容器就是一种装其他各种对象的器皿。java.util包 
容器:Set, List, Map ,数组。只有这四种容器。 
Collection(集合) 一个一个往里装,Map 一对一对往里装。 
Set:没有顺序,不可以重复。 List:有顺序,可以重复。 互相的equals就算重复。 
Map定义了存储Key-Value的方法。 
Collection里装的必须都是Object,不能是基础类型。比如Int类型的值分配在栈上,而栈上的内容都是动态的。 
容器类对象在调用remove,cotains等方法时,需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法,对于自定义的类型,需要重写equals方法和hashCode方法以实现自定义对象相等。 
原则: 如果要重写equals方法,那必须重写hashCode方法。两个对象互相equals,那这两个对象必须具有相同的hashCode。 
比较两个对象是不是相等的时候,主要用的是equals方法,当对象用在Map里面作为键时用hashCode方法,这样效率比较高。当对象当做键的时候,hashCode会有用。 
两个对象如果互相equals,那么他们的hashCode一定相等。

二、HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法:

HashMap:HashMap实现了Map接口,底层使用的是Hash算法存储数据。HashMap将数据以键值对的方式存储。

HashSet:HashSet实现了Set接口,底层也是用的是Hash算法存储数据。而且HashSet内部有HashMap类型的成员变量,方法也调用了HashMap的方法,存储的时候只不过值为null.

ArrayList:ArrayList实现了List接口,底层使用的是数组,存储空间上是相邻的,所以查询起来会很方便,效率也会比LinkedList要高

LinkedList:实现了List接口,底层使用的是使用双向链表的形式,存储的数据在空间上很可能不相邻,但是他们都有一个引用连在一起,所以增删起来会很方便

Vector与ArrayList十分相似,区别就是就是vector是一种线程安全类,它的方法都带有Synchronized关键字,实际中很少用到。如果遇到多线程的问题,JAVA提供了一个Collections工具类,可以把ArrayList转换成线程安全的类。

三、

LinkedList类 LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。 注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: List list = Collections.synchronizedList(new LinkedList(...)); ArrayList类 ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。 
HashMap类 HashMap继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。 
总结 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

这篇关于HashMap,Hashset,ArrayList以及LinkedList集合的区别和用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015371

相关文章

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

C# 委托中 Invoke/BeginInvoke/EndInvoke和DynamicInvoke 方法的区别和联系

《C#委托中Invoke/BeginInvoke/EndInvoke和DynamicInvoke方法的区别和联系》在C#中,委托(Delegate)提供了多种调用方式,包括Invoke、Begi... 目录前言一、 Invoke方法1. 定义2. 特点3. 示例代码二、 BeginInvoke 和 EndI

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错