1、List 和 Set 的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1、List 和 Set 的区别相关的知识,希望对你有一定的参考价值。
参考技术A 一:区别概述1:List:可重复,有序,数组或者链表存储
2:Set:不可重复,无序,使用ma存储
二:ArrayList
2.1:通过数组的方式进行存储:查询快,增删慢的特点,但是他的效率高
2.2:初始化过程中若知道数组的大约范围,建议制定长度;若不指定长度,默认初始化大小为10;
2.3:关注ArrayList两个属性
size 和 elementData,其中size可以理解为数组长度,elementData理解为容量大小;
比如,List a =new ArrayList(20); a.add("1"); 其中size = 1;elementData的长度为20
每次使用add方法时,会触发扩容方法,当容量不够时候,进行扩容:
扩容时步骤:
1:将size+1,和现在的elementData长度比较比较
2:若小于现有容量,则不扩容;
3:若大于现有容量,则
3 .1:备份原数组;
3.2:扩容为原来大小的1.5倍
3.2:通过Arrays.copyOf(elementData, newCapacity)方法返回扩容后的数据。
a:传空参数的情况是全删呀!!!
b:主要使用了一个方法:fastRemove(int index),每次remove都是进行一次数组拷贝,remove 后size会变化
方式1:Iterator迭代器
方式2:foreach
错误方式:
错误方式分析:
a: ArrayList extents AbstractList,AbstractList类有一个变量modCount,记录数组的变化次数;
每次对数组进行增删操作时候,都会进行modCount++;
b:Iteratoriterator = a.iterator(); 是实例化一个AbstractList的内部类Itr;实例化时,初始化expectedModCount =modCount;
每次使用next方法时,会调用checkForComodification(),这个方法是比较expectedModCount和modCount;若不相等,就报错。
c:正确案例中,用了内部类Itr的remove方法,这个方法最后会强制expectedModCount=modCount;
d:错误案例中,使用了ArrayList类的remove,只会减小modCount,不会强制expectedModCount=modCount;所以删除一次后,expectedModCount<modCount,不会通过校验,失败。
三:LinkedList (直接抄的博客的)
a:是由node节点组成的双向链表,没有初始化容量,不存在扩容概念;
b:node节点的结构如下
c:每当有新数据添加的时候,会将元素添加到链表的最后位置,并将元素的prev 指向前一个元素,前一个元素的next指向需要添加的元素;
参考文章: 从源码浅谈面试List 和 set 的区别
C++中set和map有啥区别
【中文标题】C++中set和map有啥区别【英文标题】:What is the difference between set and map in C++C++中set和map有什么区别 【发布时间】:2016-03-24 17:43:12 【问题描述】:考虑创建电话簿,但不知道哪个 STL 容器更好。请解释set和map之间的区别。在哪种情况下哪个是更好的选择。
例如,当名称和数字存储在地图中时,如果将名称作为键,则无法使用数字进行搜索,反之亦然。那么究竟哪种容器/数据结构可以达到这个目的呢?
【问题讨论】:
***.com/questions/21804086/… What is the difference between set vs map in C++?的可能重复 What is the difference between set vs map in C++?、What is the difference between std::set and std::map等可能重复 【参考方案1】:内部很少。它们都是红黑树。
map 虽然包含一对作为其值类型。然后,树操作仅对该对中的第一个元素进行操作。然后 Map 添加额外的功能来基于第一个元素进行搜索并仅检索第二个元素。
当你需要 key->value 对时使用 map。当您需要整体跟踪唯一值时使用 set。
【讨论】:
【参考方案2】:将std::set
视为std::map
,其中键也是值。
【讨论】:
以上是关于1、List 和 Set 的区别的主要内容,如果未能解决你的问题,请参考以下文章
Python列表(list)、元祖(tuple)、集合(set),和字典(dictionary)区别和联系