以升序给出输出的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,但是当我运行它时,我总是得到 以升序输出。我无法理解为什么会发生这种情况,因为哈希集没有对其元素进行排序 HashSet不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变 从 HashSet不保证集合的迭代顺序;特别是,它不保证顺序随时间保持不变以升序给出输出的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)来实现排序迭代。请注意,哈希集永远不会以任何特定顺序返回您的值 您必须使用树集(或其他类型的
从。请注意,
哈希集
永远不会以任何特定顺序返回您的值
您必须使用
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()的实现