您好,欢迎访问一九零五行业门户网

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());
运行结果:
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());
运行结果:
ps:arraylist中使用对象数组来存储对象,在每次插入新的对象时会插入到size大小处;至于hashset,前面说到是通过hashmap来实现的,存入的对象作为hashmap的key,如果key相同会替换value。当然,sortedset(继承了set接口)能够以指定的排序方式来保存元素。
(3)list可以通过下标来访问,而set不能。
list接口常见实现类有arraylist、vector和linkedlist,而set接口常见实现类有hashset、treeset和linkedhashset。
更多java相关文章推荐:java入门教程
以上就是java collection中set与list接口的区别的详细内容。
其它类似信息

推荐信息