我使用HashMap从2列CSV文件中检索数据。这适用于字典样式的应用程序 - 一列包含术语,第二列包含定义,这些定义通过HashMap链接到术语。
我的应用程序所做的第一件事是打印出术语列表作为列表。但是,它们似乎都是随机排列的。
我希望它们保持与CSV文件中的顺序相同(我不会依赖任何字母表方法,因为我偶尔会出现非标准字符,并且希望在源代码中使用字母表)
这是我的代码,它从CSV文件中提取数据并将其打印到列表中:
String next[] = {}; // 'next' is used to iterate through dictionaryFile
final HashMap<String, String> dictionaryMap = new HashMap<String, String>(); // initialise a hash map for the terms
try {
CSVReader reader = new CSVReader(new InputStreamReader(getAssets().open("dictionaryFile.csv")));
while((next = reader.readNext()) != null) { // for each line of the input file
dictionaryMap.put(next[0], next[1]); // append the data to the dictionaryMap
}
} catch (IOException e) {
e.printStackTrace();
}
String[] terms = new String[dictionaryMap.keySet().size()]; // get the terms from the dictionaryMap values
terms = dictionaryMap.keySet().toArray(terms);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, terms));
ListView lv = getListView();
这会导致应用加载,条款就位,但它们处于完全模糊的顺序。如何让它们按照原来的顺序打印?
答案 0 :(得分:3)
问题是正常HashMap
不保证订单。 This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.
尝试使用LinkedHashMap
,它会维持广告订单。
来自文档 - Hash table and linked list implementation of the Map interface, with predictable iteration order
以下是文档的链接 - http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html