Java自学-集合框架 ArrayList和HashSet的区别
程序员文章站
2022-10-24 19:25:06
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的区别
-
Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别
-
Java自学-集合框架 ArrayList和LinkedList的区别
-
Java自学-集合框架 ArrayList和HashSet的区别
-
Java中res.add(list)和res.add(new ArrayList<Integer>(list))的区别
-
Java自学-集合框架 ArrayList常用方法
-
Java自学-集合框架 HashSet
-
java中的ArrayList集合的扩容和一些方法的使用:
-
java中ArrayList和LinkedList的区别详解
-
java 容器集合类的区别用法(Vector ArrayList Map)