我将带有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时间来获得价值。 我怎么能这样做?
答案 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)
,直到您在添加后修改列表本身。