Uko*_*Uko 88 java collections set
如果有人熟悉Objective-C中有一种叫做集合NSOrderedSet充当集及其项目可以作为访问数组的人.
Java中有这样的东西吗?
我听说有一个名为的集合LinkedHashMap,但是我找不到任何类似的集合.
Cha*_*har 106
Gee*_*nte 30
每个Set都有一个迭代器().普通的HashSet迭代器是随机的,TreeSet按排序顺序执行,LinkedHashSet迭代器按插入顺序迭代.
但是,您无法替换LinkedHashSet中的元素.您可以删除一个并添加另一个,但新元素不会替换原始元素.在LinkedHashMap中,您可以替换现有键的值,然后值仍将按原始顺序排列.
此外,您不能插入某个位置.
也许你最好使用带有显式检查的ArrayList来避免插入重复项.
Mic*_*rdt 10
看一下Java标准API文档.就在附近LinkedHashMap,有一个LinkedHashSet.但请注意,那些顺序是插入顺序,而不是元素的自然顺序.并且您只能按该顺序迭代,而不是随机访问(除非通过计算迭代步骤).
还有一个SortedSet由TreeSetand 实现的接口ConcurrentSkipListSet.两者都允许以元素的自然顺序或a Comparator,但不是随机访问或插入顺序进行迭代.
对于既能通过索引进行高效访问又能有效实现set标准的数据结构,您需要一个跳过列表,但Java Standard API中没有该功能的实现,但我确信很容易找到一个在网上.
TreeSet已订购。
http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html
尝试使用java.util.TreeSet该工具SortedSet。
引用文档:
“元素使用它们的自然顺序进行排序,或者通过在集合创建时提供的比较器进行排序,具体取决于使用的构造函数”
请注意,添加、删除和包含具有时间成本 log(n)。
如果要将集合的内容作为数组访问,则可以执行以下操作:
YourType[] array = someSet.toArray(new YourType[yourSet.size()]);
Run Code Online (Sandbox Code Playgroud)
该数组将使用与 TreeSet 相同的标准(自然或通过比较器)进行排序,并且在许多情况下,这比执行 Arrays.sort() 更有优势
| 归档时间: |
|
| 查看次数: |
100130 次 |
| 最近记录: |