2010-01-15 51 views
0

我有一組鍵和一個鍵/值對列表。這些值的形式爲Long,BigInteger。將佔位符放在基於Java中的一組鍵的鍵/值列表中

// key/values pairs: Long,BigInteger 
List<Object[]> values; 
// id list that corresponds to the keys for the list above 
Set<Long> ids; 

如果密鑰集的任何成員不存在作爲鍵/值列表的關鍵,我想它的0

值什麼是一個很好的方式添加到列表在Java中這樣做?

+2

這裏有一些奇怪的要求,或者你可以使用'Map'嗎? – 2010-01-15 17:36:49

+1

爲什麼你使用一個列表而不是鍵值對的地圖? – MAK 2010-01-15 17:36:52

+0

mmyers/MAK:訂單很重要? – 2010-01-15 17:38:45

回答

4

建議地圖的各種評論者提供了一個很好的觀點。怎麼樣,而不是

List<Object[]> values 

您使用

Map<Long, BigInteger> values 

在這種情況下:

for(Long id : ids) { 
    if(!values.containsKey(id)) { 
     values.put(id, BigInteger.ZERO); 
    } 
} 

事實上,即使代碼必須保持書面我會考慮使用通過預處理列表到地圖中進行操作,然後將其轉儲回對象數組列表中。

1

我想你想使用像Google Collections Multimap實現之一。不要重新發明輪子。 Apache Commons有我猜想的類似內容,但我更喜歡Google圖書館。

查詢不具有值的鍵將返回空集合。

編輯:排序順序,唯一性等選項都可用,只需根據您的要求選擇正確的實施。

3

在Java中這樣做的好方法是什麼?

更換由Map<Long, BigInteger>Set<Long>List<Object[]>。如果訂購不重要,則使用HashMap。如果您想按鍵自動排序,請使用TreeMap。如果您想維護廣告訂單,請使用LinkedHashMap

E.g.

Map<Long, BigInteger> unorderedMap = new HashMap<Long, BigInteger>(); 
Map<Long, BigInteger> orderedByKeys = new TreeMap<Long, BigInteger>(); 
Map<Long, BigInteger> orderedByInsertion = new LinkedHashMap<Long, BigInteger>(); 

這樣,您可以使用任何Map方法來處理鍵/值對。例如。

Long key = 1L; 
BigInteger value = map.get(key); 
if (value == null) { 
    value = new BigInteger(0); 
    map.put(key, value); 
} 

你甚至可以Map#keySet()得到所有的鍵:

Set<Long> keys = map.keySet(); 

要了解更多有關地圖,諮詢Sun's own tutorial這個話題。

相關問題