use*_*930 158 java sorting set
Java Set是否保留订单?一个方法正在向我返回一个Set,并且假设数据是有序的但是迭代了Set,数据是无序的.有没有更好的方法来管理这个?是否需要更改方法以返回除Set之外的其他内容?
NPE*_*NPE 227
该Set界面不提供任何订购保证.
其子接口SortedSet表示根据某个标准排序的集合.在Java 6中,有两个标准容器可以实现SortedSet.他们是TreeSet和ConcurrentSkipListSet.
除了SortedSet界面,还有LinkedHashSet类.它会记住元素插入集合的顺序,并按顺序返回元素.
xia*_*.li 93
LinkedHashSet是你需要的.
Lak*_*man 15
由于许多成员建议使用LinkedHashSet来保留集合的顺序.你可以使用这个实现来包装你的集合.
SortedSet实现可用于排序顺序,但出于您的目的使用LinkedHashSet.
同样来自文档,
"这种实现使其客户端免受HashSet提供的未指定的,通常是混乱的排序,而不会增加与TreeSet相关的成本.它可用于生成与原始订单具有相同顺序的集合的副本,而不管原始集合集的实施:"
资料来源:http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html
Set只是一个界面.为了保留顺序,您必须使用该接口的特定实现和子接口SortedSet,例如TreeSet或LinkedHashSet.你可以这样包装你的Set:
Set myOrderedSet = new LinkedHashSet(mySet);
Run Code Online (Sandbox Code Playgroud)
以下是SetJava中可用的标准实现的顺序特征的快速摘要:
对于您的特定情况,您可以先对项目进行排序,然后使用1或2中的任何一个(最有可能LinkedHashSet或者TreeSet).或者更有效地,您可以将未分类的数据添加到一个TreeSet将自动处理排序的数据.