set map list区别在于:1、定义不同;2、数据顺序不同。list是一种有序集合,按照对象进入的顺序保存对象,允许重复对象;set是无序的集合,不是按照对象进入的顺序保存,不可重复;map以键值对的方式存储元素,根据键得到值,所有Map集合的Key是无序不可重复的。
1、定义不同
List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合。
list是一种有序集合,按照对象进入的顺序保存对象,并且允许重复对象,插入多个null值。list查找效率快,但增删效率慢,增删会引起其他元素位置发生改变。
set是无序的集合,不是按照对象进入的顺序保存,不可重复,只允许一个null值出现。set检索元素效率低,而增删效率快,增删不会引起其他元素位置发生改变。
map以键值对的方式存储元素,根据键得到值,所有Map集合的Key是无序不可重复的,key和value都是引用数据类型,存的都是内存的地址。
2、数据顺序不同
List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)。
延伸阅读:
什么是ArrayList?
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。
List接口的大小可变数组的实现,位于API文档的java.util.ArrayList<E>。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector类,除了此类是不同步的。)
size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间 运行,也就是说,添加 n 个元素需要 O(n) 时间。其他所有操作都以线性时间运行(大体上讲)。与用于 LinkedList实现的常数因子相比,此实现的常数因子较低。
每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
文章标题:set map list区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/36489