从本质上来讲,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接口的区分的细致内容,更多请关注ki4网别的相干文章!