Java自学-集合框架 ArrayList和HashSet的区别
程序员文章站
2022-05-20 20:41:26
Java ArrayList和HashSet的区别 示例 1 : 是否有顺序 ArrayList: 有顺序 HashSet: 无顺序 HashSet的具体顺序,既不是按照插入顺序,也不是按照hashcode的顺序。 以下是 HasetSet源代码 中的部分注释 / It makes no guara ......
java arraylist和hashset的区别
示例 1 : 是否有顺序
arraylist: 有顺序
hashset: 无顺序
hashset的具体顺序,既不是按照插入顺序,也不是按照hashcode的顺序。
以下是hasetset源代码中的部分注释
/** * it makes no guarantees as to the iteration order of the set; * in particular, it does not guarantee that the order will remain constant over time. */
不保证set的迭代顺序; 确切的说,在不同条件下,元素的顺序都有可能不一样
换句话说,同样是插入0-9到hashset中, 在jvm的不同版本中,看到的顺序都是不一样的。 所以在开发的时候,不能依赖于某种臆测的顺序,这个顺序本身是不稳定的
package collection; import java.util.arraylist; import java.util.hashset; public class testcollection { public static void main(string[] args) { arraylist<integer> numberlist =new arraylist<integer>(); //list中的数据按照插入顺序存放 system.out.println("----------list----------"); system.out.println("向list 中插入 9 5 1"); numberlist.add(9); numberlist.add(5); numberlist.add(1); system.out.println("list 按照顺序存放数据:"); system.out.println(numberlist); system.out.println("----------set----------"); hashset<integer> numberset =new hashset<integer>(); system.out.println("向set 中插入9 5 1"); //set中的数据不是按照插入顺序存放 numberset.add(9); numberset.add(5); numberset.add(1); system.out.println("set 不是按照顺序存放数据:"); system.out.println(numberset); } }
示例 2 : 能否重复
list中的数据可以重复
set中的数据不能够重复
重复判断标准是:
首先看hashcode是否相同
如果hashcode不同,则认为是不同数据
如果hashcode相同,再比较equals,如果equals相同,则是相同数据,否则是不同数据
package collection; import java.util.arraylist; import java.util.hashset; public class testcollection { public static void main(string[] args) { arraylist<integer> numberlist =new arraylist<integer>(); //list中的数据可以重复 system.out.println("----------list----------"); system.out.println("向list 中插入 9 9"); numberlist.add(9); numberlist.add(9); system.out.println("list 中出现两个9:"); system.out.println(numberlist); system.out.println("----------set----------"); hashset<integer> numberset =new hashset<integer>(); system.out.println("向set 中插入9 9"); //set中的数据不能重复 numberset.add(9); numberset.add(9); system.out.println("set 中只会保留一个9:"); system.out.println(numberset); } }
练习:
生成50个 0-9999之间的随机数,要求不能有重复的
答案 :
package collection; import java.util.hashset; import java.util.set; public class testcollection { public static void main(string[] args) { set<integer> numbers =new hashset<>(); while(numbers.size()<50){ int i = (int) (math.random()*10000); numbers.add(i); } system.out.println("得到50个不重复随机数:"); system.out.println(numbers); } }
推荐阅读
-
Java中HashMap和Hashtable及HashSet的区别
-
Java中HashMap和Hashtable及HashSet的区别
-
详解Java中HashSet和TreeSet的区别
-
详解Java中HashSet和TreeSet的区别
-
php开发框架有哪些(javascript和java的区别)
-
php后台开发框架(php后端和java后端的区别)
-
python后端框架(java和python的区别)
-
linkedlist和arraylist的区别是什么(java的四种引用关系从强到弱)
-
linkedlist和arraylist的区别是什么(java的四种引用关系从强到弱)
-
python后端框架(java和python的区别)