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
如果您的意思是按内容对元素进行排序,请使用的实现(继承)
排序可通过以下方式完成:
- 调用在任何对象实现接口上定义的
- 使用您传递的实现
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 ) ;