Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用映射接口代替列表接口实现BaseAdapter中的数据存储_Java_Android - Fatal编程技术网

Java 用映射接口代替列表接口实现BaseAdapter中的数据存储

Java 用映射接口代替列表接口实现BaseAdapter中的数据存储,java,android,Java,Android,我想使用Map接口的一种实现,而不是实现ArrayList来将数据存储在BaseAdapter中。我正在寻找通过索引从映射中获取值的最佳方法。当我有索引时,从地图创建列表似乎效率不高 @Override public Object getItem(int position) { // TODO Auto-generated method stub List<Map.Entry<String, String>> list = new LinkedList<Map.E

我想使用Map接口的一种实现,而不是实现ArrayList来将数据存储在BaseAdapter中。我正在寻找通过索引从映射中获取值的最佳方法。当我有索引时,从地图创建列表似乎效率不高

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
List<Map.Entry<String, String>> 
list = new LinkedList<Map.Entry<String,String>>(this.countries.entrySet());
return list.get(position);
}
有什么建议如何正确地做吗


谢谢你

为了提高性能,您需要将带有映射值的ArrayList分别保存在适配器中:

// Map<String, String> countries;
ArrayList<String> countryList = new ArrayList<String>(countries.values());
不要忘记在getCount中返回正确的值:

@Override
public Object getCount() {
    return countryList.size();
}

请注意,无法保证映射列表中的值将如何排序,因此您可能也希望对它们进行排序。

为什么不使用更好的列表而不是映射?我希望通过键入具有BaseAdapter实例的活动来保存对映射值的访问权限。因此,我在BaseAdapter构造函数中传递映射,但。。。EntrySet是一个没有顺序的集合。在一个集合中构建的列表中,你不能期望有任何形式的顺序。我一直在努力解决地图和列表之间通信的问题。以及如何为列表提供添加到地图中的相同元素。我发现地图应该提供一个界面来通知新项目刚刚出现在地图上。此接口将由BaseAdapter实现。
@Override
public Object getCount() {
    return countryList.size();
}