Java data structure O(1) lookup & ordering

2017-02-03 13:51:05 +08:00
 disposablexyz
Java 有任何 built-in data structure 提供以下特性吗?

1 ) 查询任何一个 element 的复杂性是 O(1)
2 )提供有序的 iteration
3084 次点击
所在节点    Java
28 条回复
Michaelssss
2017-02-03 14:08:18 +08:00
linkedhashmap
disposablexyz
2017-02-03 14:10:28 +08:00
@Michaelssss  我有想过那个,但是它的 ordering 是根据 insertion order 而不是 comparator 的,所以不算。
QAPTEAWH
2017-02-03 14:19:35 +08:00
或者谁证明一下这个是不可能的?
boywang004
2017-02-03 14:20:40 +08:00
组合一个 TreeMap 和 HashMap 。
Michaelssss
2017-02-03 14:21:37 +08:00
@disposablexyz 那应该没有吧,满足 O ( 1 )这个条件的应该就是 Map 的实现类了,实在不行自己 Override 一下 LinkedHashMap 应该是最快了
luos543
2017-02-03 14:22:25 +08:00
简单来说就是想要 O(n)的有序数据结构?
allan888
2017-02-03 14:22:44 +08:00
红黑树吧。
TreeMap ,提供有序 order ,但是查询是 log(n), n 不大的情况下 log(n)估计也能接受了。
otakustay
2017-02-03 14:29:36 +08:00
插入和查询都是 O(1)的使用 comparator 的数据结构不存在的吧……
只查询 O(1),插入可以 O(n)的话用 2 个结构组合起来就行
disposablexyz
2017-02-03 14:30:31 +08:00
@QAPTEAWH 是可能的,可以用一个 wrapper 包 HashSet 实现,因为没有其他 operation 的复杂性要求
@luos543 想要 O(1)的 lookup 的有序数据结构
@allan888 红黑树不是很 ideal 呢
disposablexyz
2017-02-03 14:31:18 +08:00
@otakustay 插入不需要 O(1),只有查询需要
disposablexyz
2017-02-03 14:33:19 +08:00
@otakustay 你的意思是说查询用 HashSet ,插入同时插入到 HastSet 和 TreeSet 么
disposablexyz
2017-02-03 14:34:06 +08:00
@otakustay 然后 return TreeSet 的 iterator ?
disposablexyz
2017-02-03 14:34:54 +08:00
ehhh, by set I mean map
otakustay
2017-02-03 14:36:28 +08:00
@disposablexyz yes ,内存应该够的吧
disposablexyz
2017-02-03 14:40:37 +08:00
@otakustay 不大好
otakustay
2017-02-03 14:40:57 +08:00
@disposablexyz 你都不说不好在哪里……
luos543
2017-02-03 14:41:55 +08:00
感觉这样的数据结构挺小众的。创建 iteration 的时候才做 sorting ,不会对机器很大负担么?
disposablexyz
2017-02-03 14:47:14 +08:00
@luos543 创建 iteration 的时候才做 sorting 是我能想出来的解决方案,但不一定是这样,也可以在 insert 的时候做。实际上我不需要知道怎么做到,只要求能够有一个 sorted 的 iteration 和 O(1)的查询
allan888
2017-02-03 14:54:45 +08:00
你仅仅是查询加有序遍历,明显 hashmap+treemap 是可以的。
可以做到插入 O(logn), 删除 O(logn), 查询 O(1), 修改 O(logn), 也能有序遍历。
bumz
2017-02-03 15:53:26 +08:00
1) 查询任何一个 element 的复杂性是 O(1) —— HashMap
2) 提供有序的 iteration —— TreeMap

一个新的数据结构诞生了:"IterableHashMap",用 HashMap 做查询, TreeMap 提供迭代器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/337863

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX