【发布时间】:2012-12-11 19:22:00
【问题描述】:
我必须解决的问题是,我必须在树中输入 IP 地址前缀以及与它们关联的数据,以便以后可以查询它们。我正在从一个文件中读取这些地址,该文件可能包含多达 1600 万条记录,并且该文件可能有重复项,我也必须存储这些地址。
我编写了自己的二叉搜索树,但了解到 Java 中的 TreeMap 是使用红黑树实现的,但 TreeMap 不能包含重复项。
我希望查询花费O(logn) 时间。
数据结构需要在 Ram 中,所以我也不确定我要如何存储 1600 万个节点。
我想问:使用像番石榴这样的库在多地图中插入 Ips 会不会对性能造成太大影响?还是有更好的方法来做到这一点?
【问题讨论】:
-
查找尝试。它们广泛用于 IP 路由。这将有所帮助:drdobbs.com/windows/fast-ip-routing-with-lc-tries/184410638
-
TreeMap和 Guava 的Multimap都不允许使用前缀。无论它们是通过树还是哈希表实现的,它们都不允许诸如“查找最长包含的前缀 1.2.3.4”之类的事情;至少不是直接的(NavigableMap可以在这里提供帮助)。
标签: java data-structures guava binary-search-tree memory-efficient