如何排序android.util.SparseArray?
例如。我有SparseArray:
1 - 2.33
5 - 1.5
结果:
5 - 1.5
1 - 2.33
感谢!!!
- 已编辑
我用过地图。谢谢你的帮助。
答案 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()