2012-02-23 80 views
0

ArrayList的混亂我有ArrayList和HashMap的HashMap和在檢索

一個問題,因爲根據我的要求,我將數據存儲到HashMap和之後,我已經創建了一個列表,列表>。

 HashMap<String,String> hashmap; 
     static List<HashMap<String,String>> hashmap_string; 

雖然檢索從數據庫中的值,並把它放在HashMap和ArrayList的,如:

    contract_number=c.getString(c1); 
        Log.i("c1.getString,contract_number", contract_number); 
        String service_level=c.getString(c2); 
        hashmap=new HashMap<String, String>(); 
        hashmap.put(contract_number, service_level); 
        hashmap_string.add(hashmap); 

現在我要檢索的值作爲字符串,字符串

,當我應用代碼爲:

   for(int i=0;i<hashmap_string.size();i++) 
       { 
        Log.i("arraylist", ""+hashmap_string.get(i)); 
       } 

我在formet中獲取單個字符串值爲

   {Contract,ServiveValue} 

,但我想這個分成2個字符串值......此外,這些值是多餘的,如果是使用HashMap的話,就不會顯示我的冗餘值。

用於多個鍵和值中的一個一對一映射,請幫我在這..

+0

爲什麼你不只使用HashMap來代替。如果您需要將'Contract'和'ServiveValue'作爲單個值,我認爲這是更好的選擇。 – 2012-02-23 08:59:21

+0

看來你正在設計你的數據非常糟糕。你試圖用這種方式解決什麼問題? – 2012-02-23 09:13:00

+0

因爲HashMap不檢索重複的值,我的合同和服務水平值有重複的值 – Kanika 2012-02-23 09:14:02

回答

0

的HashMap(及地圖一般)。你確定你需要嗎?看看你的代碼,看起來你使用地圖作爲「Pair」類。我會跳過列表,並把一切都放在同一張地圖,然後遍歷對在地圖:

// using tree map to have entries sorted on the key, 
// rather than the key's hash value. 
Map<String, String> data = new TreeMap<String, String>(); 
data.put("c1", "s1"); 
data.put("c2", "s2"); 

for (Map.Entry<String, String> entry : data.entrySet()) { 
    String contract = entry.getKey(); 
    String level = entry.getValue(); 
    Log.i("data", contract + " : " + level"); 
} 

將輸出(假設TreeSet的):

c1 : s1 
c2 : s2 

或者,例如創建包含兩個字符串(合同號和服務級別)的ContractServiceLevel類,並將該類的實例放入列表中。

編輯:

public final class ContractServiceLevel { 
    public final String number; 
    public final String serviceLevel; 

    public ContractServiceLevel(String c, String s) { 
     number = c; 
     serviceLevel = s; 
    } 
} 

List<ContractServiceLevel> contracts = new ArrayList<ContractServiceLevel>(); 
contracts.add(new ContractServiceLevel("c1", "s1.1")); 
contracts.add(new ContractServiceLevel("c1", "s1.2")); 
contracts.add(new ContractServiceLevel("c2", "s2.1")); 

for (ContractServiceLevel contract : contracts) { 
    Log.i("data", contract.number + ":" + contract.servicveLevel); 
} 

將輸出:

c1 : s1.1 
c1 : s1.2 
c2 : s2.1 
+0

什麼關於如果我把 – Kanika 2012-02-23 09:19:06

+0

data.put(「c1」,「s1」);並再次data.put(「c1」,s1「);現在它只會返回1對爲」c1「,」s1「...和我的密鑰和值都包含重複的值..所以我該如何解決這 – Kanika 2012-02-23 09:20:30

+0

你可以去列表的變種,看看我編輯的帖子。 – claesv 2012-02-23 09:26:21

1

看來你失去了一些東西。當您執行hashmap_string.get(i)時,您將獲得<HashMap<String,String>。所以,這是代碼的正確價值。

你可以做的是:

 HashMap<String, String> hashMap2 = hashmap_string.get(i); 
     String value = hashMap2.get("your_key"); 

其他方式,你已經有了,兩個分離的字符串值。您可以通過使用keySet()values()方法獲得該方法,而不是使用hashMap2對象。

+0

它仍然不檢索重複的數據 – Kanika 2012-02-23 09:23:37

-2

String value = hashmap.get(「contract」); 你會得到的值爲ServiveValue