Rumah > Java > JavaAsas > Java Collection中set与list接口的区别

Java Collection中set与list接口的区别

王林
Lepaskan: 2019-11-25 11:04:37
asal
3656 orang telah melayarinya

Java Collection中set与list接口的区别

从本质上来说,List和Set均是接口,且继承了Collection接口。我们经常用到的ArrayList、HashSet分别是继承了List和Set接口,由于用到了泛型,在实际运用时可以指定实际的类型来使用。通常我们用它们来存储对象,当然用的比较多的还有Map,它们都提供了插入、删除和查找的接口,且支持使用Iterator。那么,List和Set之间究竟有什么区别,在使用过程中应该如何区分?

List和Set区别

(1)List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元素,而在Set中不允许重复元素存在,即使插入相同元素也会进行替换。我分别对ArrayList和HashSet插入相同元素进行了验证:

HashSet<String> hset = new HashSet<String>();
ArrayList<String> arrlst = new ArrayList<String>();
 
hset.add("hello");
hset.add("hello");
 
arrlst.add("hello");
arrlst.add("hello");
 
System.out.println("hset size: "+hset.size()+" toString: "+hset.toString());
System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());
Salin selepas log masuk

运行结果:

b49ad310bb8f239bd5bf139f4416ae9.png

PS:看JDK源代码会看到HashSet的实现是通过HashMap来完成的。

java学习视频推荐:java入门

(2)List和Set之间另外一个很重要的区别与元素先后存放顺序有关。List是有序集合,而Set是无序集合。List会保留元素插入时的顺序,也就是说之前插入的元素的索引要比之后插入的元素的索引要小。而Set不会保留插入时的顺序。同样,来验证一下:

HashSet<String> hset = new HashSet<String>();
ArrayList<String> arrlst = new ArrayList<String>();
 
hset.add("1");
hset.add("3");
hset.add("2");
 
arrlst.add("1");
arrlst.add("3");
arrlst.add("2");
 
System.out.println("hset size: "+hset.size()+" toString: "+hset.toString());
System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());
Salin selepas log masuk

运行结果:

ba29355c08c2ccbef550d4e71f9258b.png

PS:ArrayList中使用对象数组来存储对象,在每次插入新的对象时会插入到size大小处;至于HashSet,前面说到是通过HashMap来实现的,存入的对象作为HashMap的key,如果key相同会替换value。当然,SortedSet(继承了Set接口)能够以指定的排序方式来保存元素。

(3)List可以通过下标来访问,而Set不能。

List接口常见实现类有ArrayList、Vector和LinkedList,而Set接口常见实现类有HashSet、TreeSet和LinkedHashSet。

更多java相关文章推荐:java入门教程

Atas ialah kandungan terperinci Java Collection中set与list接口的区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Isu terkini
Bolehkah java digunakan sebagai bahagian belakang web?
daripada 1970-01-01 08:00:00
0
0
0
Tidak dapat memasang java
daripada 1970-01-01 08:00:00
0
0
0
Pasang JAVA
daripada 1970-01-01 08:00:00
0
0
0
Bagaimanakah php melaksanakan penyulitan sha1 java?
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan