0

HashMapを使用して2列のCSVファイルからデータを取得しました。これは辞書スタイルのアプリで使用するためのものです。1つの列には用語が含まれ、2番目の列には定義が含まれます。これらは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.

を使用してみてください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 に答える