如何使用数组列表实现Map作为键

时间:2013-08-06 10:41:58

标签: java

我将带有ArrayList的HashMap作为键,将值作为Integer,如何从特定键中获取值。

Map< List<Object>,Integer> propositionMap=new HashMap<List<Object>,Integer>();  

my key are:[Brand, ID], [Launch, ID], [Model, ID], [Brand, UserModelNoMatch], [ProducerPrice, UserModelMatch], [ProducerPrice, ID]]
my values are:[3, 5, 4, 2, 1, 6]

在我的程序中,在不同的地方,我需要找到特定键的特定值。我不想用循环evry时间来获得价值。 我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

暂不说这是一个坏主意(如评论中所述),你不需要做任何特别的事情:

List<Object> list = new ArrayList<Object>();
// add objects to list

Map<List<Object>,Integer> propositionMap = new HashMap<List<Object>,Integer>();  
propositionMap.put(list, 1);
Integer valueForList = propositionMap.get(list); // returns 1

单独构建列表时可以获得相同的值:

List<Object> list2 = new ArrayList<Object>();
// add the same objects (by equals and by hashcode) to list2 as to list

Integer valueForList = propositionMap.get(list2); // returns 1

但是在将地图用作地图中的关键字之后,您需要注意不要更改列表!

list.add(new Object());
Integer valueForList = propositionMap.get(list); // likely returns null

同样,这很可能是一个坏主意。

答案 1 :(得分:0)

看到你想要相同的行为,我强烈建议使用带有类的接口。

public interface Proposition
{
    public int getID();
}

public class Brand implements Proposition
{
    private int id;

    public Brand(int _id_)
    {
        this.id = _id_;
    }

    public int getID()
    {
        return this.id;
    }
}

public class Launch implements Proposition
{
    private int id;

    public Launch(int _id_)
    {
        this.id = _id_;
    }

    public int getID()
    {
        return this.id;
    }
}

public class ProducerPrice implements Proposition
{
    private int id;
    private int UserModelMatch;

    public ProducerPrice(int _id_, int _UserModelMatch_)
    {
        this.id = _id_;
        this.UserModelMatch = _UserModelMatch_;
    }

    public int getID()
    {
        return this.id;
    }

    public int getUserModelMatch()
    {
        return this.UserModelMatch;
    }
}

然后使用散列图作为命题对象

Map<Integer, Proposition> propositionMap = new HashMap<Integer, Proposition>();

Proposition newprop = new ProducerPrice(6, 1);
propositionMap.put(newprop.getID(), newprop);

Proposition someprop = propositionMap.get(6);

if (someprop instanceof ProducerPrice)
{
    ProducerPrice myprodprice = (ProducerPrice)someprop;
    // rest of logic here
}

答案 2 :(得分:0)

你可以像往常一样获得价值:

propositionMap.get(arrayListN)

,直到您在添加后修改列表本身。