Java之Set与List区别
2021/6/5 12:23:59
本文主要是介绍Java之Set与List区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Set与List主要区别
- 在List中允许插入重复的元素,而在Set中不允许重复元素存在。
- 与元素先后存放顺序有关,List是有序集合,会保留元素插入时的顺序,Set是无序集合。
- List可以通过下标来访问,而Set不能。
List接口
- ArrayList(数组实现):允许对元素进行快速随机访问,从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
- LinkedList(链表实现):很适合数据的动态插入和删除,随机访问和遍历速度比较慢(遍历和访问可以使用ArrayList)。还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
- Vector(数组实现):支持线程的同步,某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销(相关方法与ArrayList很相似,在方法上用synchronized修饰)。
Set接口
- hashset : 当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置(为什么HashSet 是如何保证不重复的)。也就是说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相等。不能保证元素的排列顺序,顺序有可能发生变化;集合元素可以是null,但只能放入一个null;
- LinkedHashSet : LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
- TreeSet : TreeSet是SortedSet接口的唯一实现类,底层的数据结构是红黑树,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。
ArrayList与TreeSet的对比代码案例
package cn.tedu.test6; import java.util.*; public class SetVsList { public static void main(String[] args) { //TreeSet和ArrayList对比案例 Set<Integer> set = new TreeSet<>(); List<Integer> list = new ArrayList<>(); set.add(1); list.add(1); set.add(2); list.add(2); set.add(3); list.add(3); set.add(4); list.add(4); set.add(5); list.add(5); System.out.println("set:"+set); //输出set System.out.println("list"+list); //输出list set.add(2);//不会添加重复数据 list.add(2);//可以添加重复数据 System.out.println("添加数据之后:"); System.out.println("set:"+set); System.out.println("list:"+list); System.out.println("是否含有数据5:"); System.out.println(set.contains(5)); //是否含有数据5 System.out.println(list.contains(5)); System.out.println("移除数据之后:"); set.remove(4); //移除数据4 list.remove(4); //移除下标(索引)为4的数据 System.out.println("set:"+set); System.out.println("list:"+list); System.out.println("获取数据(只针对list):"); System.out.println("指定下标获取内容:"+list.get(1)); //获取list下标为1的数据,set无get()方法 System.out.println("指定内容获取下标:"+list.indexOf(2));//获取list数据内容为2的位置 System.out.println("set size:"+set.size()); //输出set大小 System.out.println("list size:"+list.size()); //输出list大小 System.out.print("遍历set之后:"); for(Integer value:set) { //遍历set System.out.print(value+" "); } System.out.println(); System.out.print("遍历list之后:"); for(Integer value:list) { //遍历list System.out.print(value+" "); } } } 结果显示: set:[1, 2, 3, 4, 5] list[1, 2, 3, 4, 5] 添加数据之后: set:[1, 2, 3, 4, 5] list:[1, 2, 3, 4, 5, 2] 是否含有数据5: true true 移除数据之后: set:[1, 2, 3, 5] list:[1, 2, 3, 4, 2] 获取数据(只针对list): 指定下标获取内容:2 指定内容获取下标:1 set size:4 list size:5 遍历set之后:1 2 3 5 遍历list之后:1 2 3 4 2
这篇关于Java之Set与List区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Java语音识别项目资料:新手入门教程
- 2024-11-26JAVA语音识别项目资料:新手入门教程
- 2024-11-26Java语音识别项目资料:入门与实践指南
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料:新手入门教程
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解
- 2024-11-25Java对接阿里云智能语音服务资料详解