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

在 hashmap 中,不维护插入顺序,因此最后插入的项目可以先访问。如果要保持插入顺序,请改用linkedhashmap。

于 2012-01-30T09:27:15.000 回答
2

更新:jitendra sharma 的回答是最好的:如果您只需要保持原始插入顺序,树形图的成本比链接哈希图要高得多,并且不会对您的项目添加任何内容。

Hashmap 无法排序。这是他们效率的一部分。

如果您需要排序,请使用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 回答