gpt4 book ai didi

Java 哈希集和树集

转载 作者:行者123 更新时间:2023-12-05 01:19:41 25 4
gpt4 key购买 nike

我有一个问题。它说 java 中的 hashset 不维护订单,而是查看我的程序

public static void main(String[] args) {
HashSet<Integer> io=new HashSet<Integer>();

Integer io1=new Integer(4);
Integer io2=new Integer(5);
Integer io3=new Integer(6);

io.add(io2);
io.add(io3);
io.add(io1);

System.out.println(io);
}

并执行它,每次我运行它时都会给我一个有序集。为什么会这样?

另一个问题是:如果我实现一个树集(就像我在之前的程序中所做的那样,而不是使用树集的哈希集和使用我的类的 Integer 的整数)我必须实现 compareto ?

最佳答案

HashSet不维护顺序,但它必须在打印时按某种顺序遍历元素。 HashSetHashMap 支持,它按照存储元素的 bin 的顺序遍历元素。在您的简单示例中,4、5、6 映射到 bin 4、5、6(因为整数的 hashCode 是整数的值),因此它们按升序打印。

如果您尝试添加 40、50、60,您会看到不同的顺序 ([50, 40, 60]),因为默认的初始 bin 数量为 16,因此哈希码 40、50、60 将映射到 bin 40 %16 (8),50%16 (2) ,60%16 (12),所以50是第一个被迭代的元素,接着是50和60。

至于TreeSet<SomeCostumClass> ,您可以实现 Comparable<SomeCostumClass>SomeCostumClass ,或传递 Comparator<SomeCostumClass>给构造函数。

关于Java 哈希集和树集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com