List、Set、Map的区别

news2024/12/26 23:16:24

List、Set、Map的区别 img

​ (图一)

1.面试题:你说说collection里面有什么子类。

(其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set)

正如图一,list和set是实现了collection接口的。

img

(图二)

List:1.可以允许重复的对象。

2.可以插入多个null元素。

3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。

4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

img

(图三)

Set:1.不允许重复对象

2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。

3. 只允许一个 null 元素

4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。

img

(图四)

1.Map不是collection的子接口或者实现类。Map是一个接口。

2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。

3. TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。

4. Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。

5.Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

2.面试题:什么场景下使用list,set,map呢?

(或者会问为什么这里要用list、或者set、map,这里回答它们的优缺点就可以了)

答:

  1. 如果你经常会使用索引来对容器中的元素进行访问,那么 List 是你的正确的选择。如果你已经知道索引了的话,那么 List 的实现类比如 ArrayList 可以提供更快速的访问,如果经常添加删除元素的,那么肯定要选择LinkedList。

  2. 如果你想容器中的元素能够按照它们插入的次序进行有序存储,那么还是 List,因为 List 是一个有序容器,它按照插入顺序进行存储。

  3. 如果你想保证插入元素的唯一性,也就是你不想有重复值的出现,那么可以选择一个 Set 的实现类,比如 HashSet、LinkedHashSet 或者 TreeSet。所有 Set 的实现类都遵循了统一约束比如唯一性,而且还提供了额外的特性比如 TreeSet 还是一个 SortedSet,所有存储于 TreeSet 中的元素可以使用 Java 里的 Comparator 或者 Comparable 进行排序。LinkedHashSet 也按照元素的插入顺序对它们进行存储。

  4. 如果你以键和值的形式进行数据存储那么 Map 是你正确的选择。你可以根据你的后续需要从 Hashtable、HashMap、TreeMap 中进行选择。

img

img

img

大家可以跟着下面的步骤一起尝试一下。

1.我们知道了列表要实现排序,需要重写comparable接口的compareTo的方法。

但是是我不知道comparaTo里面要怎么写呢,它有传入参数吗?它有返回值吗?如果有事什么类型的呢?ok,下面一起来做一下。先把这个链接的帮助文档下载下来。下载完之后,打开帮助文档,

img

img

img

2.看完了帮助文档是不是心里稍微有点底气了呢,那现在打开eclipse我们一起来写一写吧。

首先我们要比较对象的哪个属性呢。年龄?身高?还是体重?刚刚看帮助文档已经知道了,所以下面大家一起来写一下。

img

如果大家也是像上图这种写法,那么再想一想有没有更好的办法。

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

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

相关文章

一文深入分析arm64 cache机制

说明: Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio 1. 概述 先来看一下经典的存储器层次结构图: 不同存储器技术的访问时间差异很大,CPU和主存…

2023年深圳前端培训机构排名,评价较高的机构分享

深圳前端培训机构排行榜的前三名是哪家呢?不少学生在选择学习前端开发的时候,都会通过网络来找一些相关的排行,评判哪家机构的教学比较好,今天小编就来针对这类相关的培训为大家分享一些内容,帮助大家选择更适合自己的…

RabbitMQ面试知识点总结

1.消息模式 P2P Worker Pub/Sub(exchange 4种) 四种交换机:direct/topic/headers/fanout,默认交换机是direct,其中Publish/Subscribe,Routing,Topics三种模式可以统一归为Exchange模式,只是创建时交换机的…

【LeetCode每日一题】【2023/2/1】2325. 解密消息

文章目录2325. 解密消息方法1:哈希表2325. 解密消息 LeetCode: 2325. 解密消息 简单\color{#00AF9B}{简单}简单 给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下: 使用 key 中 26 个英文小写字母第…

SpringBoot 监控统计(SQL监控、慢SQL记录、Spring监控、去广告)

1 基本概念Druid 是Java语言中最好的数据库连接池。虽然 HikariCP 的速度稍快,但是,Druid能够提供强大的监控和扩展功能 ,也是阿里巴巴的开源项目。Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面&…

算法---冗余连接

题目 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges ,edge…

蓝桥杯2022 python C组

蓝桥杯2022 python C组 跟之前的就四题不一样 第二题:特殊时间 就是i 从0-9,j从0-9 i是三个一样的,然后看看他们能不能成为 年 月日 时分 成为年只要大于0就好了,称为月日的话月要从1-12,日呢,特殊的日子…

Kylin入门实战(数据源添加 + Model定义 + Cube构建 + 结果查询 + 查询限制)

目录1. 入门实战目的2. Hive源数据准备3. 创建project并添加Hive数据源4. 定义model5. 定义Cube6. 构建cube7. 查询cube构建后的结果8. 查询限制1. 入门实战目的 实现从不同的维度统计员工的工资,例如从岗位类型、员工年龄、部门等不同维度,进行多维度的…

【LeetCode每日一题】【2023/1/30】1669. 合并两个链表

文章目录1669. 合并两个链表方法1:模拟1669. 合并两个链表 LeetCode: 1669. 合并两个链表 中等\color{#FFB800}{中等}中等 给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。 请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0…

亚信科技通信、交通行业数据库项目入选“星河”标杆、优秀案例

近日,由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织的第六届大数据“星河”案例评选结果公示,亚信科技及旗下亚信安慧支持完成的中国移动通信集团上海有限公司“业务支撑系统核心数据库…

Day 17 springboot 监听机制

1 Java 监听机制springboot监听机制,其实是对java提供的事件监听机制的封装。Java中的事件监听机制定义了以下几个角色:事件:Event,继承EventObject类,例如点击,拖动等等。事件源:Source&#x…

Python 正确重写运算符(重载)

运算符重载的作用是让用户定义的对象使用中缀运算符(如和|)和一元运算符(如-和~)。在Python中,这些也算是运算符:函数调用:()属性访问:.元素访问和切片:[]运算符重载基础…

RabbitMQ消息转换器

文章目录RabbitMQ消息转换器RabbitMQ消息转换器 在SpringAMQP的发送方法中,发送消息和接受消息的类型都是Object,也就是说,我们可以发送任意对象类型的消息,SpringAMQP都会帮我们把发送的消息序列化为字节后再进行发送。下面&…

剑指 Offer 第 16 天 把数组排成最小的数 扑克牌中的顺子

目录 面试题45. 把数组排成最小的数 面试题61. 扑克牌中的顺子 面试题45. 把数组排成最小的数 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输…

会声会影2023最新版v25.3.0.0视频剪辑软件

各位新年好呀,2022年的经历让我们更加成长,我们也终于迎来了新的一年。在这里,COCO玛奇朵先祝大家新年快乐,万事如意! 会声会影是一款操作简单易学的视频剪辑软件,会声会影的编辑步骤是流程化的&#xff0…

lamp的简单搭建 小白笔记

笔记是观看哔哩哔哩视频所写。链接如下:经典LAMP架构-跟着老王学Linux_哔哩哔哩_bilibili笔记有多处不妥之处,本是自己写笔记加深印象,仅供参考。所用linux系统是CentOS7。注意:该笔记操作后的网站仅主机内的局域网可以访问&#…

【数学建模】常用算法-线性回归Python实现

1 前言 本文主要讲解基于线性回归的糖尿病预测的python实现,后续会进行进一步的更新 2 代码实现 2.1 数据准备 导入相关的包 import numpy as np import pandas as pd加载数据集 这个数据集是sklearn.datasets自带的糖尿病数据集(diabetes&#xff…

I.MX6ULL内核开发2:内核模块实验2

目录 一、模块参数 二、符号共享 三、模块自动卸载 四、关于Makefile的说明 一、模块参数 根据不同应用场合给内核模块传递不同的参数,提高内核模块灵活性 定义一个常见变量使用module_param宏把传参值赋给变量module_param(name,type,perm) name: 参数名type…

uniapp弹幕

效果图 barrage.vue <template><view class"l-barrage"><block v-for"(item,index) in items" :key"index"><view v-if"item.display" class"aon" :style"{top: ${item.top}rpx}"><…

数据库丨记录一次TiDB v5.2.3迁移到v6.1.0的实操过程

文章目录前言一、环境简介二、迁移前提条件三、迁移方案四、迁移过程总结前言 TiDB 是一款结合了传统的关系型数据库和 NoSQL 数据库特性的新型分布式数据库。是第一个把数据分布在全球范围内的系统&#xff0c;并且支持外部一致性的分布式事务。 TiDB 具备强一致性和高可用性…