0

我已使用 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();

这会导致应用程序在条款到位的情况下加载,但它们的顺序完全模糊。如何让它们按照原来的顺序打印?

4

1 回答 1

2

问题是正常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.

尝试使用 a 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

于 2012-08-27T02:02:12.257 回答