sek*_*t64 55 java data-structures
我需要一个数据结构来以1:1的关系存储string-int值对,并且能够从对应的任何一种方式查找.
我用Hashtable和String数组编写了一个类,并将数据存储了2次,并使用内置函数进行查找.
我的问题是,是否有更好的方法来实现这一目标?并且更好,我的意思是效率高,不存储数据2次,最好不要写大量的代码:P.
coo*_*ird 52
看起来你可能正在寻找一个bimap.
Google Collections(现在是Guava的一部分)包含BiMap一些带有一些实现的接口.
从BiMap文档:
bimap(或"双向映射")是一种映射,它保留其值及其键的唯一性.此约束使bimaps支持"反向视图",这是另一个包含与此bimap相同的条目但具有反向键和值的bimap.
该BiMap.inverse方法似乎返回a Map,其中值为键,键为值,因此Map可用于调用get值并检索键.
另外,Map返回的inverse是底层数据的视图,因此它不必为原始数据制作额外的副本.
从BiMap.inverse方法文档:
返回此bimap的反向视图,该视图将每个bimap的值映射到其关联的键.两个bimaps由相同的数据支持; 对一个的任何更改都将出现在另一个中.
Gop*_*opi 30
你可以这样做一个简单的实现.请注意,此实现中不会复制数据.只有参考文献!我添加了add和get的实现.运动中删除和其他所需的方法:)
public class TwoWayHashmap<K extends Object, V extends Object> {
private Map<K,V> forward = new Hashtable<K, V>();
private Map<V,K> backward = new Hashtable<V, K>();
public synchronized void add(K key, V value) {
forward.put(key, value);
backward.put(value, key);
}
public synchronized V getForward(K key) {
return forward.get(key);
}
public synchronized K getBackward(V key) {
return backward.get(key);
}
}
Run Code Online (Sandbox Code Playgroud)
其中,即使是"价值",其应用程序的责任也是独一无二的.用法示例:
TwoWayHashmap twmap = new TwoWayHashmap<String, String>();
twmap.add("aaa", "bbb");
twmap.add("xxx", "yyy");
System.out.println(twmap.getForward("xxx"));
System.out.println(twmap.getBackward("bbb"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33049 次 |
| 最近记录: |