我有一个声明如下的集合
Set<String> orderSet = new LinkedHashSet <String>();
存储的字符串值是日期和时间约定的组合
orderSet.add(bean.getDate()+"," + bean.getTimeConvention());
我总是以插入顺序获得输出,这就是为什么linkedHashSet是为
我需要的输出是在相反的顺序,使最新的日期是第一?
我听说过NavigableSet,但它不适合我的场景。有什么建议吗?
谢谢
我有一个声明如下的集合
Set<String> orderSet = new LinkedHashSet <String>();
存储的字符串值是日期和时间约定的组合
orderSet.add(bean.getDate()+"," + bean.getTimeConvention());
我总是以插入顺序获得输出,这就是为什么linkedHashSet是为
我需要的输出是在相反的顺序,使最新的日期是第一?
我听说过NavigableSet,但它不适合我的场景。有什么建议吗?
谢谢
4条答案
按热度按时间dvtswwa31#
根据javadoc,Set的目的是消除元素集合中的重复项。为了反转集合中的元素,您需要首先创建一个List。下面是一个例子:
83qze16e2#
LinkedHashSet按插入顺序排序。在你按顺序获取事物的情况下(比如从数据库中的查询),这会保持你获取它们的顺序,并为你提供O(1)的查找(与TreeSet的O(log n)相比)。当对象的顺序不容易比较时,它也很有用。
LinkedHashSet对于缓存也特别有用(参见它的同类LinkedHashMap,它为
removeEldestEntry
提供了一个方法,可以用来实现LRU缓存(驱逐对象以仅维护100个(或任何其配置)最近使用的项目)。然而,LinkedHashSet不是接口NavigableSet的子类。这意味着不存在用于操纵集合的许多工具。要反转NavigableSet,可以获取
descendingIterator()
或descendingSet()
。还有其他的比特,比如能够得到某个东西的下一个最高值,或者从一个点到另一个点的子集。有两个实现NavigableSet的类:ConcurrentSkipListSet(使用skip list)和TreeSet(使用红黑树)。
NavigableSet的要求是元素具有顺序(如
Comparable
所实现的)。其中包括String,Date,以及各种数字类,以及whole bunch more ...或者说,任何你实现的Comparable。请注意,这些都是***集合***,这意味着结构中只有一个元素的副本。如果您实际上是在一个列表与多个副本后,那么你有你的名单工作。这些是用于不同目的的不同工具。
tyg4sfes3#
我会这样做:
ajsxfq5m4#
LinkedHashMap
按插入顺序或最后访问顺序对元素进行排序。对于一个有排序元素的集合,SortedSet
或它的子类NavigableSet
通常是更好的选择。你说
NavigableSet
不适合你的场景。没有细节很难判断那句话的正确性。以防万一它实际上对你或其他阅读这个问题的人有用,下面是它的样子: