Java 转换地图<;字符串,字符串>;列出<;NameValuePair>;-这是最有效的吗?

Java 转换地图<;字符串,字符串>;列出<;NameValuePair>;-这是最有效的吗?,java,Java,我有一个映射对,希望将其转换为带有NameValuePair对象的ArrayList。这是执行转换的最佳方式吗 List<NameValuePair> nvpList = new ArrayList<NameValuePair>(2); for(Map.Entry<String, String> entry : pairs.entrySet()){ NameValuePair n = new NameValuePair(entry.getKey(), en

我有一个
映射对
,希望将其转换为带有
NameValuePair
对象的
ArrayList
。这是执行转换的最佳方式吗

List<NameValuePair> nvpList = new ArrayList<NameValuePair>(2);
for(Map.Entry<String, String> entry : pairs.entrySet()){
  NameValuePair n = new NameValuePair(entry.getKey(), entry.getValue());
  nvpList.add(n);
}
List nvpList=newarraylist(2);
for(Map.Entry:pairs.entrySet()){
NameValuePair n=新的NameValuePair(entry.getKey(),entry.getValue());
nvpList.add(n);
}

如果必须使用NameValuePair,则选择yes。我唯一建议的是创建成对大小的ArrayList.size(),以避免ArrayList在内部数组逐渐增长时多次调整大小的开销:

List<NameValuePair> nvpList = new ArrayList<>(pairs.size());
for (Map.Entry<String, String> entry : pairs.entrySet()) {
  nvpList.add(new NameValuePair(entry.getKey(), entry.getValue()));
}
List nvpList=newarraylist(pairs.size());
for(Map.Entry:pairs.entrySet()){
添加(新的NameValuePair(entry.getKey(),entry.getValue());
}
对于未来的读者:

@Locoboy您的代码片段需要一些更正,@leffebrene的回答将失败,因为您无法实例化接口

需要更正此行:

nvpList.add(new NameValuePair(entry.getKey(), entry.getValue()));
像这样:

nvpList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
BasicNameValuePair类实现了NameValuePair接口,因此可以在这里使用它

请参阅下面完整正确的代码段:

public List<NameValuePair> convertToNameValuePair(Map<String, String> pairs) {

    List<NameValuePair> nvpList = new ArrayList<>(pairs.size());

    for (Map.Entry<String, String> entry : pairs.entrySet()) {
        nvpList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
    }

    return nvpList;
}
public List convertToNameValuePair(映射对){
List nvpList=newarraylist(pairs.size());
for(Map.Entry:pairs.entrySet()){
添加(新的BasicNameValuePair(entry.getKey(),entry.getValue());
}
返回nvpList;
}

使用初始容量初始化
ArrayList
。哦,是的,这是在没有编译器的情况下编写的。初始容量等于pairs.size()确保有意义。它的Map.Entry,请参阅我的答案。我更需要这样做:
httpPost.setEntity(新的UrlEncodedFormEntity(nameValuePairs))这仅适用于库版本>=4.0的情况。对于较低版本(即<4.0),@Leffebrene的答案是正确的(事实上,NameValuePair是一个实现java.io.Serializable的类)。