2013-08-06 66 views
2

我有HashMap與ArrayList作爲鍵和值作爲整數,我如何從特定的鍵獲得值。如何實現具有數組列表作爲鍵的映射

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時間來獲得價值。 我該怎麼做?

+12

這是一個壞主意。使用集合作爲鍵很少是一個好主意 –

+0

這將是非常困難的。 – tbodt

+0

看你如何使用它,你真的可能想要爲'Brand','Launch','Model'和'ProducerPrice'單獨創建類。 – bas

回答

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; 
    } 
} 

然後利用命題一個HashMap對象

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 
} 
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 

同樣,這很可能是一個壞主意。直到你修改添加後列表本身

propositionMap.get(arrayListN) 

0

你可以得到價值通常的方式。