6

私には がありHashMap<String,String>、このマップを に返す静的メソッドがありますActivity

メソッドは次のようになります。

public static HashMap<String, String> getAll() {    
    HashMap<String, String> map = new HashMap<String,String>();

    map.put("ab", "value1");
    map.put("bc", "value2");
    map.put("de", "value3");

    return map;
}

そのマップをスピナーで使いたいです。したがって、アクティビティは次のようになります。

List list = new ArrayList<String>();
HashMap<String, String> map = Constants.getAll();

for (String key : map.keySet()) {
    list.add(Constants.getAll().get(key).toString());
}

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinTest = (Spinner)findViewById(R.id.spinTest);

spinTest.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        urlDebug.setText(list.get(arg2).toString());
    }

    public void onNothingSelected(AdapterView<?> arg0) {

    }
});

spinTest.setAdapter(adapter);

アプリケーションを実行しようとしたとき、まったく問題ありませんでした。しかし、スピナーをクリックすると、getAll() メソッドに追加したように項目が順序付けられませんでした。つまり、順序は ab - bc -de でなければなりませんが、順序はランダムです。

何が真実ではないのですか?

4

3 に答える 3

6

ハッシュマップでは、挿入順序が維持されないため、最後に挿入された項目が最初にアクセスされる可能性があります。挿入の順序を維持したい場合は、代わりにlinkedhashmapを使用してください。

于 2012-01-30T09:27:15.000 に答える
2

更新: jitendra sharma による回答が最適です: ツリーマップは、リンクされたハッシュマップよりもはるかにコストがかかり、元の挿入順序のみを維持する必要がある場合は、プロジェクトに何も追加しません。

ハッシュマップはソートできません。それは彼らの効率の一部です。

並べ替えが必要な場合は、TreeMapを使用してください。

幸運を。

于 2012-01-30T09:28:23.547 に答える
0

リストをソートした後、adapter.notifyDataSetChanged()またはspinTest.setAdapter(adapter)を呼び出す必要があります。

spinTest.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        urlDebug.setText(list.get(arg2).toString());
    }

    public void onNothingSelected(AdapterView<?> arg0) {

    }
});

spinTest.setAdapter(adapter);
// TODO: Sort the list
// Some code here
adapter.notifyDataSetChanged();
于 2012-01-30T09:42:10.523 に答える