欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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的不同版本中,看到的顺序都是不一样的。 所以在开发的时候,不能依赖于某种臆测的顺序,这个顺序本身是不稳定的
Java自学-集合框架 ArrayList和HashSet的区别

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相同,则是相同数据,否则是不同数据
Java自学-集合框架 ArrayList和HashSet的区别

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);
    }
}