获取hashmap以按顺序打印出来

时间:2012-08-27 01:58:10

标签: android listview hashmap

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

这会导致应用加载,条款就位,但它们处于完全模糊的顺序。如何让它们按照原来的顺序打印?

1 个答案:

答案 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