如何排序android.util.SparseArray? 例如我有SparseArray有:
1 - 2.33
5 - 1.5
結果:
5 - 1.5
1 - 2.33在Android中排序SparseArray
謝謝!
- 編輯
我已經使用了地圖。感謝幫助。
如何排序android.util.SparseArray? 例如我有SparseArray有:
1 - 2.33
5 - 1.5
結果:
5 - 1.5
1 - 2.33在Android中排序SparseArray
謝謝!
- 編輯
我已經使用了地圖。感謝幫助。
從SparseArray.java的底層源代碼判斷,您將無法簡單地通過調用方法來做到這一點。所有SpareArray
是兩個Java語言數組,其中一個類型爲int
,另一個類型爲Object
。這些數組是私有的實例變量,如果沒有Reflection(這些名稱可能會更改,這很危險),您不能引用它們。一個好的解決方案可能是將SpareArray
代碼本地化到您的應用程序中,並使用常規Java技術添加sort
方法,即Array.sort。
將您的密鑰/值收集到列表中。
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()
目前尚不清楚,如果你要求一個鍵或值的排序順序...
所以只是一張紙條:
二進制搜索只適用於排序的數據和SparseArray使用二進制搜索其排序(!)按鍵陣列根據the source。因此,鍵已經排序,不會接受像值的順序那樣的不同順序。
使用LinkedHashMap中,如果你想在地圖進行排序
更新:
您可以使用TreeMap的。它保持條目按鍵排序(鍵必須實現「比較」)。
我會認爲這個答案是錯誤的。 'LinkedHashMap'本身不是自己排序的,無論是密鑰還是值。根據[JavaSE 7文檔](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html),唯一的保證是保持鍵的迭代順序:「[ ...]通常是密鑰插入地圖的順序(插入順序)「。它沒有說明排序數據(或鍵)。 – dbm
Shayan_Aryan可能是指標準TreeMap或類似ConcurrentSkipListMap的東西,請參閱https://docs.oracle.com/javase/8/docs/api/java/util/AbstractMap.html – Karussell
@Karussell是的,謝謝。我完全是這個意思。我已經更新了我的答案。 –
請檢查我的解決辦法,按關鍵字排序:
private static SparseIntArray sFactorsMap = new SparseIntArray();
private static void sortMap() {
SparseIntArray sortedSparseIntArray = new SparseIntArray();
while (sFactorsMap.size() > 0) {
int min = Integer.MAX_VALUE;
for (int i = 0; i < sFactorsMap.size(); i++) {
if (sFactorsMap.keyAt(i) <= min) {
min = sFactorsMap.keyAt(i);
}
}
sortedSparseIntArray.put(min, sFactorsMap.get(min));
sFactorsMap.removeAt(sFactorsMap.indexOfKey(min));
}
sFactorsMap = sortedSparseIntArray;
}
你爲什麼要對它進行排序?密鑰不會改變,'SparseArray'不會實現'Iterable'。 – nkr
'Iterable'並不是問題所在,但我同意如果目標是對這個數據結構進行排序,像Map類的子類一樣的普通Java數據結構會更有意義。並不是說你無法按照預期的方式對SpareArray進行排序,但比使用開箱即用的解決方案更有效。 – Tom
@Tom:是的,他應該使用另一種數據結構。即使他設法對'SparseArray'進行排序,他也不能從正確的順序獲取值。 – nkr