Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java集合以保留顺序,并且应该是唯一的 Set stringSet=new HashSet();_Java_Collections_Hashset_Linkedhashset - Fatal编程技术网

java集合以保留顺序,并且应该是唯一的 Set stringSet=new HashSet();

java集合以保留顺序,并且应该是唯一的 Set stringSet=new HashSet();,java,collections,hashset,linkedhashset,Java,Collections,Hashset,Linkedhashset,显然不会维持秩序 Set<String> stringSet = new HashSet<String>(); Set linkedHastSet=new LinkedHashSet(); 当从上述集合读取元素时,它应该保持顺序,但在某些情况下它不会?我的观察是错了还是遗漏了什么?问题相当清楚: 迭代排序。。。元素插入到集合中的顺序(插入顺序) 只有LinkedHashSet才能保证可预测的顺序 来自jdoc: 哈希表和链表的集合接口的实现,用 可预测迭代顺序 而且应

显然不会维持秩序

Set<String> stringSet = new HashSet<String>();
Set linkedHastSet=new LinkedHashSet();
当从上述集合读取元素时,它应该保持顺序,但在某些情况下它不会?我的观察是错了还是遗漏了什么?

问题相当清楚:

迭代排序。。。元素插入到集合中的顺序(插入顺序)


只有LinkedHashSet才能保证可预测的顺序

来自jdoc:

哈希表和链表的集合接口的实现,用 可预测迭代顺序

而且应该是独一无二的

一个实现不包含重复的元素,正如Javadoc中更详细地解释的那样

保留订单的java集合

你说的“秩序”是什么意思

插入顺序:
LinkedHashSet
如果要跟踪对象最初添加到集合中的顺序,请使用

colors.toString():[矢车菊蓝、桃红、深灰色]

排序顺序:
TreeSet
ConcurrentSkipListSet
如果您的意思是按内容对元素进行排序,请使用的实现(继承)

排序可通过以下方式完成:

  • 调用在任何对象实现接口上定义的
  • 使用您传递的实现
与Java捆绑的两个类实现了
NavigableSet
(和
SortedSet
):
TreeSet
ConcurrentSkipListSet

TreeSet
如果在单个线程内操作该集,或仅跨线程使用该集进行只读,请使用

例如:

System.out.println( "colors.toString(): " + colors ) ;
尽管我们以错误的顺序定义了集合,但将按照
DayOfWeek
enum上定义的顺序迭代项目。这个顺序是星期一到星期天,因此我们的
EnumSet
将在星期天之前重复星期六报告

看这个

weekend.toString():[周六、周日]


什么样的引用使你认为它没有保留顺序?使用一个,它提供:插入顺序,线程安全,无重复,安全迭代。根据javadoc,它确实保留了顺序。你能给我们举个例子吗?给我们举个例子,说明我在观察中错了,但秩序没有得到保持
Set< String > colors = new LinkedHashSet<> () ;
String peachPuff = "PeachPuff" ;
colors.add( "CornflowerBlue" ) ;
colors.add( peachPuff ) ;
colors.add( "DarkSlateGray" ) ;
colors.add( peachPuff ) ; // Adding again. Original insertion order maintained.
System.out.println( "colors.toString(): " + colors ) ;
Set< String > names = new TreeSet<> () ;
names.add( "Carol" ) ;
names.add( "Alice" ) ;
names.add( "Bob" ) ;
Set< DayOfWeek > weekend = EnumSet.of( DayOfWeek.SUNDAY , DayOfWeek.SATURDAY ) ;