以升序给出输出的HashSet import java.util.Iterator; 导入java.util.*; 公共类HashSetDemo { 公共静态void main(字符串[]args) { HashSet intSet=新HashSet(); intSet.add(2); intSet.add(7); intSet.add(7); 添加(3); 添加(4); intSet.add(9); intSet.add(1); 增补(13); System.out.println(intSet); intSet.remove(1); System.out.println(intSet);

以升序给出输出的HashSet import java.util.Iterator; 导入java.util.*; 公共类HashSetDemo { 公共静态void main(字符串[]args) { HashSet intSet=新HashSet(); intSet.add(2); intSet.add(7); intSet.add(7); 添加(3); 添加(4); intSet.add(9); intSet.add(1); 增补(13); System.out.println(intSet); intSet.remove(1); System.out.println(intSet);,java,collections,Java,Collections,我已经编写了上面的代码来实现HashSet,但是当我运行它时,我总是得到 以升序输出。我无法理解为什么会发生这种情况,因为哈希集没有对其元素进行排序 HashSet不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变 从 HashSet不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变 从。请注意,哈希集永远不会以任何特定顺序返回您的值 您必须使用TreeSet(或其他类型的SortedSet)来实现排序迭代。请注意,哈希集永远不会以任何特定顺序返回您的值 您必须使用树集(或其他类型的

我已经编写了上面的代码来实现HashSet,但是当我运行它时,我总是得到 以升序输出。我无法理解为什么会发生这种情况,因为哈希集没有对其元素进行排序

HashSet不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变

HashSet不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变


从。

请注意,
哈希集
永远不会以任何特定顺序返回您的值


您必须使用
TreeSet
(或其他类型的
SortedSet
)来实现排序迭代。

请注意,
哈希集
永远不会以任何特定顺序返回您的值


您必须使用
树集
(或其他类型的
排序集
)实现排序迭代。

因为集合在概念上没有任何顺序。如果集合显式地是列表、树等,则存在特定的顺序。如果从上面的代码中看到特定的顺序,则它特定于实现和值。

因为集合在概念上没有任何顺序。如果集合显式地是列表、树等,则存在特定的顺序。如果您从上面的代码中看到特定的顺序,则它特定于实现和值。

Hashset不保证元素的顺序。但它为其中的对象计算hashcode。您可能拥有它,因为整数可能会给出一个序列ial哈希代码(直到达到最大容量)

Hashset有一个bucket数组。根据源代码,初始容量为16:

  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有一个bucket数组。根据源代码,初始容量为16:

  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的文档:

它不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变


而且,它也不能保证迭代顺序总是不恒定的。您可以获得迭代顺序。仅供参考,在我的系统中,每次执行时迭代顺序都会发生变化。

不保证。设置这些值并进行测试

static final int DEFAULT_INITIAL_CAPACITY = 16;

无法保证。请设置这些值并进行测试

static final int DEFAULT_INITIAL_CAPACITY = 16;

随着时间的推移,添加和删除元素时,迭代顺序可能会发生变化。您永远不应该依赖Hashset的迭代顺序,因为它“不保证迭代顺序”虽然在实践中,如果使用默认构造函数创建新的哈希集,并添加相同的元素,则最终会以相同的迭代顺序结束。

随着时间的推移,添加和删除元素时,迭代顺序可能会发生变化。决不能依赖哈希集的迭代顺序,因为它“不保证迭代顺序。”尽管在实践中,如果您使用默认构造函数创建一个新的Hashset,并添加相同的元素,那么最终将以相同的迭代顺序结束。

根据Hashset的javaapi文档

集合不检索元素的顺序

由于您已经在HashSet中输入了元素,并且它可以以任何顺序返回,这可能是因为它每次使用的顺序不同

集合(尤其是Hashset)的行为取决于 已添加到集合中的每个对象


因此,如果您在一段时间后运行该程序,它可能会显示相同或不同的顺序。如果它没有显示顺序上的任何更改,它可能会以这种方式使用哈希代码。而且,我们(开发人员)不掌握哈希代码。

根据Hashset的Java API文档

集合不检索元素的顺序

由于您已经在HashSet中输入了元素,并且它可以以任何顺序返回,这可能是因为它每次使用的顺序不同

集合(尤其是Hashset)的行为取决于 已添加到集合中的每个对象


因此,如果您在一段时间后运行该程序,它可能会显示相同或不同的顺序。如果它没有显示顺序上的任何更改,它可能会以这种方式使用哈希代码。而且,我们(开发人员)不掌握对哈希代码的操作。

bucket!Hash bucket!!!您拥有的可能的重复是“偶然的交互”1)哈希表的工作方式,2)Integer.hashcode()方法的实现,3)HashMap的默认初始大小和4)键的选择。有关详细说明,请参阅链接的问题/答案。Buckets!hash Buckets!!!可能重复的是“偶然交互”1)哈希表的工作方式,2)Integer.hashcode()的实现