在Android中对SparseArray进行排序

时间:2012-08-28 10:57:02

标签: android

如何排序android.util.SparseArray? 例如。我有SparseArray:
1 - 2.33
5 - 1.5
结果:
5 - 1.5
1 - 2.33

感谢!!!

- 已编辑

我用过地图。谢谢你的帮助。

6 个答案:

答案 0 :(得分:7)

目前尚不清楚您是否请求了键或值排序顺序......

所以只需注意:

二进制搜索仅适用于已排序的数据,SparseArray根据the source对其排序的(!)键数组使用二进制搜索。所以键已经排序,不会接受不同的顺序,比如值的顺序。

答案 1 :(得分:3)

对@ Karussell的现场回答的一个小修正是,valueAt()方法的文档本身也建议了一个排序顺序(在键上):

  

[{1]}将返回与最小键关联的值,valueAt(0)将返回与最大键关联的值。

keyAt()方法给出了类似的描述。

答案 2 :(得分:1)

您可以使用TreeMap。它保持条目按其键排序(密钥必须实现Comparable)。

答案 3 :(得分:0)

根据SparseArray.java的基础源代码判断,您将无法通过调用方法来做到这一点。所有SpareArray都是两个Java语言数组,一个类型为int,另一个类型为Object。那些数组是私有实例变量,你不能在没有Reflection的情况下引用它们(这很危险,因为它们的名字可能会改变)。一个好的解决方案可能是在应用程序中本地化SpareArray代码,并使用常规Java技术添加sort方法,即Array.sort

答案 4 :(得分:-1)

<强>更新

private SparseIntArray void sortMap(SparseIntArray unsorted) {
    SparseIntArray sortedSparseIntArray = new SparseIntArray();
    while (unsorted.size() > 0) {
        int min = Integer.MAX_VALUE;
        int minIndex = 0;
        for (int i = 0; i < unsorted.size(); i++) {
            if (unsorted.keyAt(i) <= min) {
                min = unsorted.keyAt(i);
                minIndex = i;
            }
        }
        sortedSparseIntArray.put(min, unsorted.get(min));
        sFactorsMap.removeAt(minIndex);
    }
    return sortedSparseIntArray;
}

答案 5 :(得分:-5)

将您的键/值收集到列表中。

                List<Integer>keys = Lists.newArrayList();
                List<Integer>vals = Lists.newArrayList();
    SparseArray<Integer>arr;
    for(int i =0; i < arr.size();i++){
    keys.add(arr.keyAt(i));
    values.add(arr.valueAt(i));
    }
    Collections.sort(keys);// sort
    Collections.sort(vals); 
    // then fill your array again.
    arr.clear();
    //...
    arr.put()