[英]HashSet giving the output in ascending order
import java.util.Iterator;
import java.util.*;
public class HashSetDemo
{
public static void main(String[] args)
{
HashSet<Integer> intSet = new HashSet<Integer>();
intSet.add(2);
intSet.add(7);
intSet.add(7);
intSet.add(3);
intSet.add(4);
intSet.add(9);
intSet.add(1);
intSet.add(13);
System.out.println(intSet);
intSet.remove(1);
System.out.println(intSet);
我已经编写了上面的代码来实现HashSet,但是当我运行它时,我总是得到升序的输出。 我不明白为什么会发生这种情况,因为HashSet不能对元素进行排序。
HashSet不保证集合的迭代顺序。 特别是,它不能保证订单会随着时间的推移保持恒定
请注意, HashSet
绝不会以任何特定顺序返回您的值。
您必须使用TreeSet
(或其他某种SortedSet
)来实现排序的迭代。
哈希集不保证元素的顺序。 但是它计算其中的对象的哈希码。 因为整数可能会给出顺序的哈希码(直到达到最大容量),您可能会遇到它
哈希集包含一系列存储桶。 根据源代码的初始容量为16:
static final int DEFAULT_INITIAL_CAPACITY = 16;
因此,当您尝试使用小整数时,它们会按顺序放置
不能保证设置这些值并进行测试。
intSet.add(21);
intSet.add(22);
intSet.add(7);
intSet.add(3);
intSet.add(4);
intSet.add(9);
intSet.add(1);
intSet.add(13);
因为从概念上讲,集合没有任何顺序。 如果集合明确是列表,树等,则存在特定的顺序。 如果您从上面的代码中看到特定顺序,则该顺序特定于实现和值。
根据HashSet的文档:
它不保证集合的迭代顺序。 特别是,它不能保证顺序会随着时间的推移保持恒定。
并且,它也不能保证迭代顺序永远不会恒定。 您可以获取迭代顺序。 仅供参考,在我的系统上,每次执行的迭代顺序都在变化。
随着时间的推移添加和删除元素,迭代顺序可能会更改。 您永远不应该依赖Hashset的迭代顺序,因为它“不能保证迭代顺序”,尽管在实践中,如果使用默认构造函数创建新的Hashset并添加相同的元素,则最终得到相同的迭代订购。
根据哈希集的Java API文档。
Set不会检索元素的Order。
由于您已经在HashSet中输入了元素,并且它可以按任何顺序返回,这可能是因为它每次都占用不同的顺序。
Set的行为,尤其是Hashset,取决于您添加到Set中的每个对象的Hashcode。
因此,如果过一会儿运行该程序,它可能会显示相同或不同的顺序。 如果未按顺序显示任何更改,则可能采用该哈希码。 操纵哈希码不在我们(开发人员)手中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.