数据结构中的List、Set、Map用法以及区别

K-Means聚类评估:SSE与轮廓系数原理、实战与选K指南 在机器学习与数据挖掘领域,聚类分析是一种核心的无监督学习技术,用于发现数据中的内在分组结构。其核心原理是通过度量样本间的相似性,将数据划分为不同的簇,使得同一簇内样本尽可能相似,不同簇间样本尽可能不同。这项技术的核心价值在于,它能够从无标签数据中自动识别模式,为后续的探索性分析、客户分群、异常检测等任务提供基础。在实际工程中,如何科学评估聚类结果的质量并选择最佳聚类数,是避免“调参玄学”的关键。常用的内部评估指标如SSE(误差平方和)从簇内紧密度出发,而轮廓系数则综合考量了簇内紧密度与簇间分离度。特别是在K 阅读详情

List,Set,Map是否继承自Collection接口? 

答:List,Set是,Map不是。 

如图: 

      Collection 

  ├List 

  │├LinkedList 

  │├ArrayList 

  │└Vector 

  │ └Stack 

  └Set 

  Map 

  ├Hashtable 

  ├HashMap 

  └WeakHashMap 

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。 

注意:Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射。 


详细介绍: 
List特点:元素有放入顺序,元素可重复 
Map特点:元素按键值对存储,无放入顺序 
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 
List接口有三个实现类:LinkedList,ArrayList,Vector 
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet 
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现) 
Query接口有一个实现类:LinkList 
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 
  HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null 
SortedMap有一个实现类:TreeMap(自动排序) 
其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对 
set 一般无序不重复.map kv 结构 list 有序 

就个人而言.list 用的比较多. 其次map  最后set 至于什么情况下使用什么集合.看情况了. 也不好说.也没那么绝对. 
看了下面的这个就更容易明白了 
写一段代码,遍历一个List中的元素 
List、Map、Set三个接口,存取元素时,各有什么特点?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
   
import  java.util.*;
public  class  Test
{
public  static  void  main(String [] arge)
{
List list =  new  ArrayList();
list.add( 0 ,  "a" );
list.add( 1 ,  "b" );
list.add( 2 ,  "c" );
list.add( 3 ,  "d" );
while (Iterator it = list.iterator();it.hasNext())
{
    Object element = it.next();
    System.out.println (element);
}
}
}
List、Map、Set
List 通过下标来存取 和值来存取
Map 键值对应来存取 
set 存取元素是无序的
--------------------------------------------------------------------
package  com.operation;
import  java.util.ArrayList;
import  java.util.HashSet;
import  java.util.Iterator;
import  java.util.List;
import  java.util.Set;
import  java.util.TreeSet;
public  class  User {
private  Integer userId;
private  String userName;
private  String address;
public  User( int  userId, String userName, String address) {
    this .userId = userId;
    this .userName = userName;
    this .address = address;
}
 
public  String getAddress() {
    return  address;
}
 
public  void  setAddress(String address) {
    this .address = address;
}
 
public  Integer getUserId() {
    return  userId;
}
 
public  void  setUserId(Integer userId) {
    this .userId = userId;
}
 
public  String getUserName() {
    return  userName;
}
 
public  void  setUserName(String userName) {
    this .userName = userName;
}
 
public  static  void  main(String[] args) {
//   Map<Integer, User> map = new TreeMap<Integer, User>();
//   map.put(1, new User(1,"李伟","beijing"));
//   map.put(2, new User(2,"王文军","beijing"));
//  
//   map.put(4, new User(2,"abc","beijing"));
//   map.put(5, new User(2,"abc","beijing"));
//  
//  
//  
//   Set<Integer> keys = map.keySet();
//  
////   Iterator<Integer> it = keys.iterator();
////   while (it.hasNext()) {
////    Integer key = it.next();
////    User user = map.get(key);
////    System.out.println("key = " + key + "\t" + "value = " + user.getUserName());
////   }
//  
//   for (Integer key : keys) {
//    User user1 = map.get(key);
//    System.out.println("key = " + key + "\t" + "value = " + user1.getUserName());
//   }
  
   
    Set<String> set =  new  HashSet<String>();
    set.add( "a" );
    set.add( "b" );
    set.add( "c" );
    set.add( "d" );
    set.add( "d" );
    set.add( "d" );
    set.add( "d" );
    set.add( "uuu" );
    set.add( "e" );
   
   
    Iterator<String> it = set.iterator();
    while  (it.hasNext()) {
     System.out.println(it.next());
    }
   
}
}
C++STL中list, vector, map, set用法与区别 List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。 Vector与list Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。 List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要... 阅读详情

相关推荐

深入RK3588嵌入式Linux开发:uboot源码定制化移植实战

本文详细介绍了RK3588嵌入式Linux开发中,如何绕过庞大的官方SDK,从官方仓库获取纯净U-Boot源码并进行定制化移植的完整实战流程。内容包括编译环境搭建、交叉工具链配置、源码结构解析、设备树(Device Tree)修改、环境变量定制、编译脚本编写以及常见问题调试技巧,旨在帮助开发者深入理解系统引导过程,掌握为定制硬件适配U-Boot的核心技能。

weixin_29169505的博客 424

python学习之list(set())函数

list(set())函数:对原列表去重并按从小到大排序 例如: a = ['f','s',3,3,4,2,'d',4,5,6,1] a = list(set(a)) print(a) [1, 2, 3, 4, 5, 6, 'd', 'f', 's'] 原理:set(a)将列表a转换为集合,集合是一个包含不重复元素的无序序列,然后再使用list将集合转换为列表 若要实现不改变原来顺序,则应再增加...

除了学习谁都不爱的博客 2万+

避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践

本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。

http9protocoller的博客 199

List,Set,Map用法以及区别(详解)

List,Set,Map是否继承自Collection接口?  答:List,Set是,Map不是。  如图:        Collection    ├List    │├LinkedList    │├ArrayList    │└Vector    │ └Stack    └Set    Map    ├Hashtable

Talk is cheap, show me the code. ---Linus Torvalds 1061

1、STVD和STVP的使用及串口烧写程序教程

文章目录一、前述二、STVD的使用三、STVP的使用1、STVP的作用:2、STVP的使用四、串口烧录程序 一、前述 STVD是意法半导体推出的,可以支持STM8和STM32 而IAR不尽如此,还支持51,MSP430等芯片 软件开发环境:编写程序,调试软件功能,下载固件到单片机中 硬件开发环境:连接外围电路,驱动功能外设,实现电气功能 最终构成一个以STM8系列单片机作为控制核心的应用系统。 MCS-51 一般的开发环境是 IAR 和 Keil STM8 一般的开发环境是 IAR 和 ST

Clichong 1万+

UE4动作游戏实例RPG Action解析二:GAS系统播放武器绑定的技能,以及GE效果

官方实例激活技能通过装备系统数据激活,我先用武器数据资产直接激活官方实例蒙太奇播放是自定义的AbilityTask,我先用更简单的方法实现效果1.1.1 插件启用AbilitySystem1.1.2 PlayerCharacter绑定技能组件AbilitySystemComponent 1.1.3 技能初始化,AbilitySystemComponent->GiveAbility 把上节获取到的默认武器绑定的技能GameAbility 添加到ASC组件 1.2、创建一个GameplayAbili

yuchenwuhen的专栏 1281

python多表格提取特征_多类别特征提取算法ReliefF Python实现

Relief算法的局限性在于只能处理两类别数据,因此1994年Kononeill对其进行了扩展,得到了可以处理多类别问题的ReliefF算法,可以处理多类别问题。该算法用于处理目标属性为连续值的回归问题。ReliefF算法在处理多类别问题时,每次从训练集样本中集中随机取出一个样本R,然后从和R同类样本中找出R的k个近邻样本,从每个R的不同类别的样本集中均找出k个近邻样本,然后更新每个特征的权重。R...

weixin_39737001的博客 1373

通信算法之264: DJI O2 协议物理层逆向工程解析

对于 DroneID,标志之间的间隙由循环前缀 (CP) 填充:每个标志末尾的副本附加在相应标志的开头。有了关于确切标志开始的信息,可以使用 FFT 将标志转移到频域 - 来自时域的 1024 个样本导致频域中的 1024 个子载波。使用比特流的解扰和涡轮解码,并将生成的数据映射到如上的DroneID 结构,通过逆向工程在无人机的固件中找到了它。注意到一些无人机(Mavic 2 和更早的 OcuSync 无人机)不发送第一个标志(标志 1),这导致更短的帧持续时间为 576 µs。//产品型号数字代号。

leegang12的专栏 3948

c++ map iterator 获取key_Set、Map、List三种集合的差别你还傻傻分不清吗?

1.集合类型主要有3种:set(集)、list(列表)和map(映射)2.三者关系3.Setset接口时Collection接口的一个子接口,是无序的,set中不包含重复的元素,也就是说set中不存在两个这样的元素a1.equals(a2)结果为true。又因为Set接口提供的数据结构是数学意义上的集合概念的抽象,因此他支持对象的添加和删除。Set的接口继承Collection接口,而且不允许集合...

weixin_39811478的博客 407

2025年新发表的语音大模型全双工模型/框架/技术

参考该论文,给出2025年新发表的全双工模型或框架或技术下面这份清单专挑、且与“全双工语音对话/同步对话(边听边说、可打断、回馈/相槌、重叠语音)”直接相关的。我也结合你提到的的四大维度(暂停处理、相槌、顺滑换手、打断管理)来点出它们各自的贡献点,便于后续评测与对比。

u013250861的博客 631

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1260

c++ list, vector, map, set 区别与用法比较

原文见链接:c++ list, vector, map, set 区别与用法比较

黎明前的沉睡 400

新能源汽车电池及充电原理详解

本文详细介绍了新能源汽车的电池包结构、铅酸电池充放电原理,以及交流和直流充电的工作原理和优缺点。内容涵盖电池串联并联原因、充电设备如车载充电机、交流充电桩和直流充电桩的介绍,以及不同充电模式的连接方式。通过对充电过程的深入探讨,有助于读者理解新能源汽车的充电技术。

让你爱上电路设计 4528

MAP、SET、LIST、QUEUE、STACK的特点与用法

这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能。 本篇分享的是:【MAP、SET、LIST、QUEUE、STACK的特点与用法】 1.背景介绍 MAP Map用于保存具有"映射关系"的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用...

IT修真院:初学者转行到互联网的聚集地 459

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

List接口、Set接口和Map接口

1、List和Set接口自Collection接口,而Map不是继承的Collection接口 Collection表示一组对象,这些对象也称为collection的元素;一些 collection允许有重复的元素,而另一些则不允许;一些collection是有序的,而另一些则是无序的;JDK中不提供此接口的任何直接实 现,它提供更具体的子接口(如 Set 和 List)实现;Map没有继

zcg_java的专栏 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java的Set/List/Map集合的了解与认识

程序时常要和各种数据打交道,合理地组织数据的结构以及相关操作是程序设计的一个重要方面,比如在程序设计中经常会使用诸如链表、散列表等数据结构。下图是常用的几种数据结构: 以前学习数组,在数组中我们可以存储整型类型、字符类型等,但并没有存储过复杂的数据类型,诸如对象。上述的这七个容器不仅可以储存基本的数据,也可以存储复杂的数据类型。 ...

qq_36923376的博客 183

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java-集合-FAQ-List/Set/Map区别

Java 集合 FAQ

深度安全实验室 443

浅谈Java中的Set,List,Map的区别

就学习经验,浅谈Java中的Set,List,Map的区别 对JAVA的集合的理解是想对于数组:   数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)   JAVA集合可以存储和操作数目不固定的一组数据。   所有的JAVA集合都位于 java.util包中!   JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. ...

光辉岁月 135

浅谈Java中的Set、List、Map的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。 JAVA集合主要分为三种类型:  Se

java、c++、机器学习方向King 476

定义空list_Collection,Set,List的区别

Set,List是Collection的子类。Collection各元素对象之间没有指定的顺序,允许有重复元素和多个Null元素对象。所以不可以排序,也不可以找出第几个第几个元素。Set各元素对象之间没有指定的顺序,不允许有重复元素,最多允许有一个Null元素对象。List各元素对象之间有指定的顺序,允许有重复元素和多个Null元素对象。import java.util.*;public clas...

weixin_30191947的博客 388

Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法

Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法 - [Java|技术相关] 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://selives.blogbus.com/logs/27714366.html ArrayList 和Vector是采用数组方式存储数据,此数组...

weixin_34126557的博客 67

浅谈Java中的Set、List、Map的区别(1)

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组:数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据。所有的JAVA集合都位于 java.util包中!JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。JAVA集合主要分为三种类型:Set(集...

weixin_34247032的博客 81

Set、List、Map以及Arraylist、LikedList、Vector、Hashtable、HashMap的介绍

ArrayList Vector LinkedList 区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表

仰望星空的专栏 1085

java中Map,List与Set的区别

Set,List,Map的区别 java集合的主要分为三种类型: Set(集)List(列表)Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存

25万+
上一篇: 路还远
下一篇: mysql水平分表和垂直分表和数据库分区
Java_Mr_Zheng
博客等级 码龄11年 18粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值