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没有命令它的元素。
答案 0 :(得分:1)
HashSet不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变
答案 1 :(得分:1)
请注意,HashSet
永远不会以任何特定顺序返回您的值。
您必须使用TreeSet
(或其他类型的SortedSet
)来实现排序迭代。
答案 2 :(得分:1)
Hashset不保证元素的顺序。但它会计算其中对象的哈希码。您可能正在使用它,因为整数可能会提供顺序哈希码(直到达到容量最大值)
Hashset有一系列存储桶。根据源代码初始容量为16:
static final int DEFAULT_INITIAL_CAPACITY = 16;
因此,当你尝试小整数时,他们会按顺序放置
答案 3 :(得分:1)
无法保证。设置这些值并进行测试。
intSet.add(21);
intSet.add(22);
intSet.add(7);
intSet.add(3);
intSet.add(4);
intSet.add(9);
intSet.add(1);
intSet.add(13);
答案 4 :(得分:0)
因为一套概念上没有任何订单。如果该集明确是List,树等,那么就有一个特定的排序。如果您从上面的代码中看到特定的订单,则它特定于实现和值。
答案 5 :(得分:0)
根据HashSet的文档:
它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。
而且,它也不能保证迭代顺序永远不会是恒定的。您可以获得迭代订单。在我的系统中,每次执行都会改变迭代顺序。
答案 6 :(得分:0)
随着时间的推移添加和删除元素,迭代顺序可能会发生变化。你永远不应该依赖Hashset的迭代顺序,因为它“不能保证迭代顺序”,尽管在实践中如果使用默认构造函数创建一个新的Hashset并添加相同的元素,最终会得到相同的迭代顺序。
答案 7 :(得分:0)
根据Hashset的Java API文档。
Set不会检索元素的顺序。
由于您已经输入了HashSet中的元素并且它可以以任何顺序返回,可能是因为它每次都会占用不同的顺序。
Set特别是Hashset的行为取决于Hashcode 您添加到Set中的每个对象。
因此,如果您在一段时间后运行该程序,它可能会显示相同或不同的顺序。如果它没有显示顺序的任何变化,它可能采用这种方式的哈希码。并且操纵哈希码不在我们的(开发人员)手中。