java - HashSet 不保证排序?

标签 java

import java.util.*;
public class DuplicateCheckMain {
 public static void main(String[] gopal){
  Integer[] args = {6,9,2,55,100,1,6,8,9};
  Integer[] args1 = {3,6,2,3,5};
  Set S = new HashSet();
  DuplicateCheck.checkDuplicate(S,args,new String("HashSet"));
  Set S1 = new HashSet();
  DuplicateCheck.checkDuplicate(S1,args1,new String("HashSet"));

  S = new TreeSet();
  DuplicateCheck.checkDuplicate(S,args,new String("TreeSet"));

  S = new LinkedHashSet();
  DuplicateCheck.checkDuplicate(S,args,new String("LinkedHashSet"));

 }
}

public class DuplicateCheck {

 public static void checkDuplicate(Set S, Integer[] args, String setname){
  for(int i = 0;i<args.length;i++){
   if(!S.add(args[i])){System.out.println("Duplicate element "+args[i]);}
  }
  System.out.println(S +" "+ setname);
 }
}

问题:对于引用S的HashSet,HashSet没有排序。但是对于引用 S1,HashSet 是排序的。为什么会这样?

最佳答案

HashSet 绝对不能保证排序。 根本无法保证顺序

来自 iterator() 方法的文档:

Returns an iterator over the elements in this set. The elements are returned in no particular order.

HashSet 旨在通过相等性非常快速地插入和检查元素的存在。就这样。

如果您需要排序,您应该使用 SortedSet 的实现,例如 TreeSetConcurrentSkipListSet

关于java - HashSet 不保证排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688493/

相关文章:

Java Eclipse Swing 设计

java - 如何从文本文件填充 JComboBox?

java - 我的代码中出现 NullPointerException

Java - 在 getter 方法中克隆属性

java - 图像未在 JLable 中加载

java - 静态变量与单例变量

java - 没有 MIME 类型 : text/x-java 的解析器

java - 如何在其成员排序的intellij中生成java的hashcode方法?

java - ASCII 世界地图导入和读取

java - 我在运行时创建的 Swing 组件未显示在 JPanel 中