如何在Java中设计这种类实现?在某种程度上:
<K, V[]>
假设我们有一个药物数据库,我们想将其所有相应的副作用添加到其V []中,其中V []是一个副作用列表(可能是一个字符串列表)?
我尝试了<K, V[]>
,但它没有用。可能我的实施是错误的。我不知道如何设计这样的数据结构。请帮助,谢谢。
首次尝试:
我初始化了一小段代码:
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public class DrugDatabse
{
private Drug[] listOfDrugs;
private class Drug<K, List<V>> implements Map, Serializable
{
private Map<K, List<V>> dictionary = new Map<K, List<V>>();
private List<V> sideEffects = new List<V>();
private Drug(K name, V sideEffects)
{
}
}
}
看起来这不是一个好的开始。
第二次尝试:
DrugDatabase.java:
import java.util.List;
import java.util.Map;
import java.util.HashMap;
public class DrugDatabase
{
private Map<Drug, List<SideEffect>> map = new HashMap<Drug,
List<SideEffect>>();
public DrugDatabase(Drug name, SideEffect se)
{
map.put(name, se);
}
public SideEffect add(Drug name, SideEffect se)
{
map.get(name).add(se);
}
public List<SideEffect> getSideEffects(Drug name)
{
return map.get(name);
}
}
Drug.java:
public class Drug
{
private String name;
public Drug(String name)
{
this.name = name;
}
}
SideEffect.java:
import java.util.List;
import java.util.ArrayList;
public class SideEffect
{
private List<String> se = new ArrayList<String>();
public SideEffect(String content)
{
se.add(content);
}
}
答案 0 :(得分:2)
使用:
Map<K, List<V>>
或使用Guava和a:
Multimap<K, V>
Guava的实施优势是您不必担心不存在的密钥;而对于前者,你必须自己为每个新密钥创建一个空的List<V>
。
Guava的Multimap的另一个优点是你有一个.containsValue()
方法,如果任何列表中的元素存在,它将查看所有List<V>
条目。
简而言之,就是使用番石榴。 Link to Multimap
javadoc
编辑:如果您对许多药物有许多常见的副作用,您也可以查看番石榴的表。