黑马程序员技术交流社区

标题: hashset底层排序的顺序结构 [打印本页]

作者: 彭海    时间: 2019-4-19 00:20
标题: hashset底层排序的顺序结构


public class Work {
//程序主方法入口
    public static void main(String[] args) {
//创建hashset集合
        HashSet<Integer> hashset = new HashSet<>();
//创建产生随机数的方法
        Random ran = new Random();
//进入循环,当hashset集合长度为10停下
        while (hashset.size()<10){
//产生一个0到9的数
            int i = ran.nextInt(10);
//添加的集合中,重复数字不添加
            hashset.add(i);
        }
//输出集合内容
        System.out.println(hashset);
    }
}
程序结果为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
public class Work {
    public static void main(String[] args) {
        HashSet<Integer> hashset = new HashSet<>();
        Random ran = new Random();
        while (hashset.size()<10){
            int i = ran.nextInt();//产生一个随机int数
            hashset.add(i);
        }
        System.out.println(hashset);
    }
}
程序结果为:[-785008203, -1034755822, 764424403, 1056402898, 1389045516,
-37467091, -38450971,-2013549591,-1283523704, -2063251469]
public class Work {
    public static void main(String[] args) {
        HashSet<Integer> hashset = new HashSet<>();
        Random ran = new Random();
        while (hashset.size()<10){
            int i = ran.nextInt(40);
            hashset.add(i);
        }
        System.out.println(hashset);
//创建一个hashset集合长度的数组用以验证
        int[] arr = new int[hashset.size()];
        int a = 0;
        for (Integer integer : hashset) {
            int i = integer%16;
//把hashset集合中的没一个元素取模底层数组长度,得到一个数组
            arr[a]=i;
            a++;
        }
        arrays(arr);//调用方法输出数组元素
    }
    public static void arrays(int[] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i==arr.length-1){
                System.out.print(arr[i]);
            }else{
                System.out.print(arr[i]+", ");
            }
        }
        System.out.println("]");
    }
}
程序结果:[17, 2, 20, 22, 26, 11, 28, 29, 14, 15]
         [1, 2, 4, 6, 10, 11, 12, 13, 14, 15]
hashset集合的底层是通过数组加链表来形成的,通过哈希值来确保元素的唯一性,而integer的哈希值就是它本身
       public static int hashCode(int value) {
               return value;
           }
//上面为Integer的hashcode源码,返回值为本身
           当我们把得到的哈希值模于hasheset底层数组长度时它所对应的自然升序就是我们hashset的顺序







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2