2013-06-05 51 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