java常用集合的区别与联系以及应用场景

news2024/11/24 13:34:47

文章目录

  • Java集合三大类
    • (1)List概述
    • (2)Set概述
    • (3)Map概述
  • 集合间的区别与联系
    • List,Set和Map的区别
    • ArrayList、Vector和LinkedList的区别
    • HashSet、LinkedHashSet和TreeSet的区别
    • HashSet与HashMap的区别
    • HashMap与HashTable有什么区别?对比Hashtable VS HashMap
    • TreeSet和TreeMap的联系和区别
    • 相同点:
    • 不同点:
  • List,Set和Map的联系和使用场景
    • ArrayList和LinkedList的使用场景
    • Set和Map的使用场景
    • Hashtable和HashMap的使用场景

Java集合三大类

Java中的集合包括三大类:Set(集)、List(列表)和Map(映射),它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。
Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,
Map的实现类主要有HashMap和TreeMap。
Collection是最基本的集合接口,声明了适用于JAVA集合的通用方法,
List 和 Set都继承自collection接口。

(1)List概述

  • 允许重复的对象。
  • 可以插入多个null元素。
  • 是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
  • 常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

(2)Set概述

  • 不允许重复对象
  • 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
  • 只允许一个 null 元素
  • Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。

(3)Map概述

  • Map不是collection的子接口或者实现类。Map是一个接口。
  • Map的每个 Entry 都持有两个对象,也就是一个键一个值,Map可能会持有相同的值对象但键对象必须是唯一的。
  • TreeMap也通过Comparator或者Comparable维护了一个排序顺序。
  • Map里你可以拥有随意多个null 值但最多只能有一个null键。
  • Map接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

集合间的区别与联系

List,Set和Map的区别

List:有序,可以存在重复元素
     集合中的对象按索引位置排序,可以有重复对象,
	 允许按照对象在集合中的索引位置检索对象。
	 
Set:无序,不允许存在重复的元素
    集合中的对象不按特定方式排序,排序方式有默认排序和定制排序,
	定制排序需要实现Comparator接口。
	与list对比,检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化。
Map:集合中的元素都包含一对键对象和值对象,键对象不可以重复,值对象可以重复。

ArrayList、Vector和LinkedList的区别

在这里插入图片描述
补充:
(1)List:列表
最重要的特点就是:它保证维护元素特定的顺序,List为Collection添加了很多方法,使得能够向List中间插入语移除元素。
(2)ArrayList: 动态数组
即由数组实现的List,允许对元素进行快速随机访问,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化
(3)LinkedList: 链表,队列,堆栈
对顺序访问进行了优化,向List中间插入与删除的开销并不大,随机访问则行对较慢,(使用ArrayList代替)还有下列方法:addFirst(),addLast(),getFirst(),getLast(),removeFirst(),romoveLast().这些方法使得LinkedList可以当作堆栈,队列和双向队列使用。

HashSet、LinkedHashSet和TreeSet的区别

Set:常用于集合元素去重 。 无序,唯一
HashSet:常用于集合元素去重

底层数据结构是哈希表(数据无序,唯一)
可以放入null,但只能放入一个null,两者中的值都不能重复,如数据库中唯一约束
依赖两个方法:hashCode()equals()来保证元素的唯一性
以哈希表的形式存放元素,插入删除速度很快
只是通用的存储数据的集合

LinkedHashSet:常用于集合元素去重与排序

底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
由链表保证元素有序
由哈希表保证元素唯一
用于保证FIFO即有序的集合(先进先出)

TreeSet

底层数据结构是红黑树。(唯一,有序)
Treeset中的数据是自动排好序的,不允许放入null值。
通过自然排序和比较器排序保证元素有序
根据比较的返回值是否是0来决定来保证元素唯一性
主要用于排序

HashSet与HashMap的区别

在这里插入图片描述

HashMap与HashTable有什么区别?对比Hashtable VS HashMap

两者都是用key-value方式获取数据。Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。它们之间有一下区别:
  ● HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。
  ● HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。
  ● HashMap不是同步的,而Hashtable是同步的。
  ● 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。

TreeSet和TreeMap的联系和区别

与HashSet完全类似,TreeSet里面绝大部分方法都是直接调用TreeMap方法来实现的。

相同点:

  • TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步。
  • 运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1)。
  • TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是排好序的。

不同点:

最主要的区别就是TreeSet和TreeMap分别实现Set和Map接口

  • TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序)
  • TreeSet中不能有重复对象,而TreeMap中value可以存在重复对象。
  • TreeMap的底层采用红黑树的实现,完成数据有序的插入,排序。
    什么时候用Set什么时候用Map呢?

List,Set和Map的联系和使用场景

ArrayList和LinkedList的使用场景

  • 若经常使用索引对容器中的元素进行访问,那么使用List 。如果知道索引,那么 List 的实现类比如 ArrayList 可以提供更快速的访问,因为LinkedList要移动指针。如果经常添加、删除元素的,选LinkedList。
  • 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
  • ArrayList是基于数组的,LinkedList是基于链表的。

Set和Map的使用场景

  • 如果希望保证插入元素的唯一性,不希望出现重复值,那么可以选择一个 Set 的实现类,比如 HashSet、LinkedHashSet 或者 TreeSet。
  • 所有 Set 的实现类都遵循了统一约束比如唯一性,而且还提供了额外的特性。比如 TreeSet 还是一个 SortedSet,所有存储于 TreeSet 中的元素可以使用 Java 里的 Comparator 或者 Comparable 进行排序。LinkedHashSet 也按照元素的插入顺序对它们进行存储。
  • 如果是希望以键值的形式进行数据存储,那么用Map。根据需要选择Hashtable、HashMap或TreeMap。

Hashtable和HashMap的使用场景

基本的不同点是Hashtable同步,HashMap不是的。
  所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。
  如果在将来有一种可能,你需要按顺序获得键值对的方案时,HashMap是一个很好的选择。
  因为有HashMap的一个子类 LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),
  你可以很方便用LinkedHashMap替换HashMap,反观要是使用的Hashtable就没那么简单了。
  同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索未来新趋势:鸿蒙系统的崭新时代

探索未来新趋势:鸿蒙系统的崭新时代 随着科技的不断发展,操作系统作为计算机和移动设备的核心,扮演着至关重要的角色。近年来,一种备受瞩目的操作系统——鸿蒙系统(HarmonyOS)崭露头角,正引领着…

Standoff 12 网络演习

在 11 月 21 日至 24 日于莫斯科举行的 "Standoff 12 "网络演习中,Positive Technologies 公司再现了其真实基础设施的一部分,包括软件开发、组装和交付的所有流程。安全研究人员能够在安全的环境中测试系统的安全性,并尝试将第三方…

Java - Spring中BeanFactory和FactoryBean的区别

BeanFactory Spring IoC容器的顶级对象,BeanFactory被翻译为“Bean工厂”,在Spring的IoC容器中,“Bean工厂”负责创建Bean对象。 BeanFactory是工厂。 FactoryBean FactoryBean:它是一个Bean,是一个能够辅助Spring实例…

Qt 中文处理

windows下 Qt显示中文的几种方式: 1, 环境:Qt 5.15.2 vs2019 64位 win11系统 默认用Qt 创建的文件使用utf-8编码格式,此环境下 中文没有问题 ui->textEdit->append("中文测试"); 2, 某些 低于…

js Array.every()的使用

2023.12.13今天我学习了如何使用Array.every()的使用,这个方法是用于检测数组中所有存在的元素。 比如我们需要判断这个数组里面的全部元素是否都包含张三,可以这样写: let demo [{id: 1, name: 张三}, {id: 2, name: 张三五}, {id: 3, name…

高效数组处理的Numpy入门总结

NumPy是Python中一个重要的数学库,它提供了高效的数组操作和数学函数,是数据科学、机器学习、科学计算等领域的重要工具。下面是一个简单的NumPy学习教程,介绍了NumPy的基本用法和常用函数。 安装NumPy 在使用NumPy之前,需要先安…

ArkTS的状态管理机制(State)

什么是ArkTS的状态管理机制 声明式UI中,是以状态(State)来驱动视图更新的(View)。 状态是指驱动视图更新的数据(被装饰器标记的变量)。 视图是指UI描述渲染得到的用户页面。 互动事件可以改变状态的值。状态改变以后,又会触发事件,渲染页面。…

统信UOS使用4种方法重置用户密码

原文链接:统信UOS使用4种方法重置用户密码 hello,大家好啊,今天我要给大家介绍的是在统信UOS操作系统上使用4种不同方法来重置用户密码。我们都知道,在日常使用中,偶尔会忘记密码,尤其是在使用多个账户的情…

蓝牙协议栈学习笔记

蓝牙协议栈学习笔记 蓝牙简介 蓝牙工作在全球通用的 2.4GHz ISM(即工业、科学、医学)频段,使用 IEEE802.11 协议 蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范,将三种规格集成在一起。其中最重要的变化就是 BLE(Blue…

淘宝订单API接口在电商行业中的应用与实现

一、引言 随着电商行业的快速发展,订单处理成为电商运营的核心环节。淘宝作为中国最大的电商平台之一,其订单API接口在电商行业中的应用越来越广泛。本文将详细介绍淘宝订单API接口在电商行业中的应用,并深入剖析相关的技术细节,…

前端设计模式之旅:命令模式

引言 使用命令模式,我们可以将执行特定任务的对象与调用该方法的对象解耦。 核心思想 命令模式的核心思想是将请求封装成一个对象,从而使请求的发起者和请求的执行者解耦。 这样,请求的发起者只需要知道如何创建命令对象并将其传递给请求者…

基于SSM架构的超市管理系统设计

基于SSM架构的超市管理系统设计 目录 基于SSM架构的超市管理系统设计 1 环境及工具1.1 IDEA软件安装1.2 JDK环境配置1.3 MySQL数据库安装1.3.1常规情况1.3.2非常规情况 1.4 Tomcat安装 2 部署与设计2.1 数据库信息创建2.2项目创建与部署 3 相关说明4 功能操作说明4.1 管理员操作…

ORA-600 [2662] “Block SCN is ahead of Current SCN“

ORA-600 [2662] "Block SCN is ahead of Current SCN" (Doc ID 28929.1)​编辑To Bottom Note: For additional ORA-600 related information please read Note:146580.1PURPOSE: This article discusses the internal error "ORA-600 [2662]"…

基于Java技术的会员制度管理的商品营销系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本商品营销系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

anolisos8.8安装显卡+CUDA工具+容器运行时支持(containerd/docker)+k8s部署GPU插件

anolisos8.8安装显卡及cuda工具 一、目录 1、测试环境 2、安装显卡驱动 3、安装cuda工具 4、配置容器运行时 5、K8S集群安装nvidia插件 二、测试环境 操作系统:Anolis OS 8.8 内核版本:5.10.134-13.an8.x86_64 显卡安装版本:525.147.05 c…

生物芯片市场分析:预计2029年将达到180亿美元

生物芯片(biochip或bioarray)是根据生物分子间特异相互作用的原理,将生化分析过程集成于芯片表面,从而实现对DNA、RNA、多肽、蛋白质以及其他生物成分的高通量快速检测。狭义的生物芯片概念是指通过不同方法将生物分子(寡核苷酸、cDNA、genomic DNA、多肽…

修改Docker0和容器的地址

修改Docker0和容器的地址 1. 需求 默认服务器安装完Docker-ce后会给docker0分配172.17.0.1/16地址. 公司新接入一个网段正好与172.17.0.1/16冲突,此时访问这台服务器的容器时就会发生网络不可达. 2. 解决方法 修改/etc/docker/daemon.json 加入一个自定义网段 vim /etc/d…

SpringBoot学习(一)——Maven安装

SpringBoot学习(一)——Maven安装 下载安装 Maven的下载页面:https://maven.apache.org/download.cgi SpringBoot学习(一)——Maven安装 下载安装 Maven的下载页面:https://maven.apache.org/download…

戏曲教育数字化思维?搜维尔科技助推中国戏曲数字人产业发展!

一场关于中国传统戏曲与数字媒体交汇的探讨之旅将于上周六完结,讲座活动旨在推动AI时代大背景下,利用元宇宙、数字人等创新技术焕发中国传统戏曲全新活力,我司做为校企合作优秀单位,受到王教授邀请,一同见证了中国戏曲…

解决 php 连接mysql数据库时报错:Fatal error: Class ‘mysqli’ not found in问题【更新23.12.12】

在使用php对mysql进行连接的过程中,出现了Fatal error: Uncaught Error: Class "mysqli" not found in的问题 解决方案 这个错误通常表示您的PHP代码中缺少MySQL扩展或者没有启用MySQL扩展。 我们首先确认一下PHP环境中已经安装了MySQL扩展。检查一下自己…