2013-06-05 112 views
7

按名稱獲取ArrayList<NameValuePair>值是否正確?按名稱獲取ArrayList <NameValuePair>值

private String getValueByKey(ArrayList<NameValuePair> _list, String key) { 
    for(NameValuePair nvPair : _list) { 
     if(nvPair.getName().equals(key)) { 
      return nvPair.getValue().toString(); 
     } 
    } 
    return null; 
} 

或者,有沒有一個快速訪問ArrayList<NameValuePair>價值的名字?

+1

這裏不是HashMap更有用嗎?還是有一些特定的原因使用ArrayList? – Humungus

+0

當你說「key」時,你的意思是來自NameValue夫婦的「名字」? –

+0

是的,「名字」就是我的意思。 – Raptor

回答

9

否 - 您將它們存儲爲列表,該列表不適用於「密鑰」訪問 - 它沒有任何密鑰的概念。

這聽起來像是你想要的東西像Map<String, String> - 假設你只需要爲每個鍵存儲一個值。

如果你堅持使用ArrayList(並且我至少將參數類型更改爲List,如果不是Iterable這是你所需要的),那麼你所得到的就是好的。

4

看來你需要其他的數據結構。如果需要例如Map<Name, Value>Map<Name, NameValuePair>

第一個解決方案可能更正確,第二個解決方案更容易實現,如果您已經有使用對存儲在列表中的事實的代碼。地圖允許獲取值的集合; CollectionList的超級接口。

5

如果你可以使用一個Map相反,他們的工作是這樣的:

Map<String,String> myMap = new HashMap<>(); 
myMap.put("key1","value1"); 
myMap.put("key2","value2"); 
myMap.put("key3","value3"); 

String str = myMap.get("key1"); 
//equivalent to your 
String str = getValueByKey(myList,"key1"); 

隨着HashMap鍵不存儲爲一個列表,所以這將是更快,你不會有使用函數來迭代容器。

然後,您可以使用myMap.keySet()myMap.values()訪問所有值,請參閱documentation