一个字典,其值是Java中的数组

时间:2014-03-02 15:29:15

标签: java arrays list dictionary

如何在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);
    }
}

1 个答案:

答案 0 :(得分:2)

使用:

Map<K, List<V>>

或使用Guava和a:

Multimap<K, V>

Guava的实施优势是您不必担心不存在的密钥;而对于前者,你必须自己为每个新密钥创建一个空的List<V>

Guava的Multimap的另一个优点是你有一个.containsValue()方法,如果任何列表中的元素存在,它将查看所​​有List<V>条目。

简而言之,就是使用番石榴。 Link to Multimap javadoc

编辑:如果您对许多药物有许多常见的副作用,您也可以查看番石榴的表。