当前位置: 首页 > news >正文

List与Set的区别

List与Set的区别

大家好,在我们平时的代码编写过程中,经常会碰到需要使用到集合类型: List与Set。很多时候,我们可能会将它们视为同一种类型进行使用,但是在实际的编程逻辑中,它们之间是存在很大差别的。接下来我们就将对这两种类型进行详细的深入解析。
下面的描述中主要针对常用的ArrayList和HashSet。

List与Set简介

在Java和Python等主流编程语言中,List和Set都是集合类型。

  • List是一种有序的集合类型,它可以包含重复的元素。在List中,每个元素都有一个与之对应的索引。

  • Set是一种无序的集合类型,不包含重复的元素。它没有索引和排序,只关注元素存在的问题。

List与Set的原理解析

List的特点

  • 有序性:List中的元素在内存中是连续的,因此每个元素都有其对应的索引值。
  • 可重复性:List中的元素可以重复,因为每个元素独立的存储其引用地址,因此引用地址可以重复。

Set的特点

  • 无序性:Set中的元素在内存中是散乱的,因此其没有索引值。
  • 不可重复:Set中的元素不能重复,因为Set的底层主要使用的是HashMap。
    public HashSet() {map = new HashMap<>();}public boolean add(E e) {return map.put(e, PRESENT)==null;}

List和Set的性能比较

使用List和Set进行数据操作,效率上会有显著的差距。

  • 对于查找和删除操作,Set的性能要优于List,因为对于Set的这两种操作,只需要查看哈希表的几个位置就可以完成,而对于List来说,需要遍历整个List。
  • 对于插入和索引元素的操作,List的性能要优于Set,因为List直接插入到指定位置,而Set需要通过哈希函数计算插入的位置。

示例代码

这是一个Java代码片段,用于演示List和Set的不同之处:

import java.util.*;public class ListSetTest {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("apple");System.out.println(list); // 输出:[apple, banana, apple]Set<String> set = new HashSet<>();set.add("apple");set.add("banana");set.add("apple");System.out.println(set); // 输出:[apple, banana]}
}

上述代码清晰的展示了List的有序可重复特性以及Set的无序不可重复特性。

总结:List和Set虽然都是集合类型,但它们各自的特性和用途大不相同,需要根据具体的应用场景合理选择。

http://www.lryc.cn/news/115920.html

相关文章:

  • MyBatis 实战指南:探索灵活持久化的艺术
  • 高中教师能去美国做访问学者吗?
  • 93 | Python 设计模式 —— 建造者模式
  • nacos升级开启鉴权后,微服务无法连接的解决方案
  • elementui弹窗页按钮重复提交问题解决
  • HBase-读流程
  • Matlab绘图 图例legend 太长,怎么减小指示线的长度
  • 力扣17(电话号码中的字符组合)
  • vue+element 下载压缩包和导出
  • 构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)
  • hive编译报错整理
  • centos磁盘爆满可以清理mysql-bin.000011吗
  • SSM个人博客项目
  • vue插槽是什么?如何使用?
  • yum常用操作命令
  • .Net C# 免费PDF合成软件
  • JAVA集合框架 一:Collection(LIst,Set)和Iterator(迭代器)
  • python ffmpeg合并ts文件
  • c++map和set剖析
  • kubernetes configmap 的data中的文件内容格式错乱
  • A TupleBackedMap cannot be modified Mybatis分页,使用List<Map>接参,无法修改map的解决方案
  • Leetcode-每日一题【剑指 Offer 13. 机器人的运动范围】
  • WEB集群——负载均衡集群
  • ubuntu 20.0.4 搭建nvidia 显卡环境
  • Windows环境下通过 系统定时 执行脚本方式 压缩并备份文件夹 到其他数据盘
  • C++系列二:STL教程-常用算法
  • 【css】渐变
  • idea打开多个项目需要开多个窗口(恢复询问弹窗)
  • 篇十三:策略模式:选择不同算法
  • Centos7.6 安装mysql过程全记录