7

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

谢谢!!!

-- 已编辑

我用过地图。感谢帮助。

4

6 回答 6

7

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

所以请注意:

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

于 2012-11-14T20:44:08.180 回答
3

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

[...]valueAt(0)将返回与最小键关联的valueAt(size()-1)值,并将返回与最大键关联的值。

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

于 2016-07-26T12:45:13.910 回答
1

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

于 2014-12-11T21:55:37.090 回答
0

从SparseArray.java的底层源代码来看,你不能简单地通过调用一个方法来做到这一点。所有 aSpareArray都是两个 Java 语言数组,一个是 type int,一个是 type Object。这些数组是私有实例变量,没有反射就不能引用它们(这很危险,因为它们的名称可能会改变)。一个好的解决方案可能是本地化SpareArray应用程序中的代码并sort使用普通 Java 技术添加一个方法,即Array.sort

于 2012-08-28T11:14:18.670 回答
-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;
}
于 2017-11-16T13:42:19.340 回答
-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()
于 2012-08-28T11:18:32.497 回答