我有存储的订单号作为键和一个字符串值作为值LinkedHashMap中:在Android中,如何订购LinkedHashMap?
{12,"apple"}
{1,"grape"}
{23,"pineapple"}
{2,"pear"}
{16,"cherry"}
我需要重点之前,我做什么都与他们对它们进行排序。我正在研究编写一个比较器,但在如何做到这一点上我试图完成一些工作。
我有存储的订单号作为键和一个字符串值作为值LinkedHashMap中:在Android中,如何订购LinkedHashMap?
{12,"apple"}
{1,"grape"}
{23,"pineapple"}
{2,"pear"}
{16,"cherry"}
我需要重点之前,我做什么都与他们对它们进行排序。我正在研究编写一个比较器,但在如何做到这一点上我试图完成一些工作。
而是使用TreeMap进行研究,它将自动按照Integer键的升序对添加的元素进行排序。
TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>();
treeMap.add(1, "foo");
treeMap.add(3, "baz");
treeMap.add(2, "bar");
按照升序整数键的顺序遍历此TreeMap将打印“foo bar baz”。
看看现在的 – dcp3450
你也可以使用NavigableMap,其中你可以有降序键或弹出keys.as等.... 新的TreeMap
TreeMap没有给出我想要的精确排序。我使用了TreeMap。它工作到了。 treeMap.add(1,“foo”); treeMap.add(3,“baz”); treeMap.add(2,“bar”); 但它不能与 treeMap.add(6,“foo”); treeMap.add(7,“baz”); treeMap.add(8,“bar”); treeMap.add(9,“bar”); treeMap.add(10,“bar”); treeMap.add(11,“bar”); treeMap.add(12,“bar”); 它采取了像下面的命令 treeMap.add(10,“bar”); treeMap.add(11,“bar”); treeMap.add(12,“bar”); treeMap.add(6,“foo”); treeMap.add(7,“baz”); treeMap.add(8,“bar”); treeMap.add(9,“bar”); –
通常情况下,其类型中名称为Hash
的任何东西都不适用于订购,至少不是大多数人订购的方式。散列结构的效率非常高,因为它们拥有基于散列的自己的访问/检索函数,这些散列函数使得项目分配的方式与我们所知的“有序”方式不同,因此它们对访问和写入非常有效,但它们不会允许那种排序。
就像NKN之前所说的,HashMap
的意思并不是要命令。 LinkedHashMap
的好处在于它保留了插入错误,但它不提供排序机制。
为了实现这个目标,你想创建一个POJO类来保存你的数据
public class fruit {
int count;
String name;
// getters and setter
}
不是让该对象实现Comparable
接口,并覆盖compareTo()
方法。一旦做到这一点,你可以拨打
Collections.sort(LinkedHashMap的)
通过自然地图是“无序/未分类”集合,如果你需要的东西一样,还有其他方法可以使用,如SparseArray(这是更适合INT /值元素),你可以创建你的INT键列表,排序,然后通过他们迭代获取值如下:
//This would be your SparseArray
{12,"apple"}
{1,"grape"}
{23,"pineapple"}
{2,"pear"}
{16,"cherry"}
int[] sortedInt = {1,2, 12, 16, 23};//Previously sorted values using any Java sorting functionality
for(int i = 0 ; i < sortedInt.length; i++){
String value = yourSparseArrat.get(sortedInt[i]);
}
而且你去那里,由排序您的密钥,然后获取值按照这个顺序你可以得到你需要的东西。
问候!
如果您需要以某种顺序存储Map
,则必须使用TreeMap
而不是LinkedHashMap
。 LinkedHashMap
只是存储元素以添加元素。 使用TreeMap
这样
TreeMap<Integer, String> map = new TreeMap<Integer, String>(
new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 > o2) return 1;
if (o1 < o2) return -1;
else return 0;
}
}
);
'LinkedHashMap'保留迭代顺序。这意味着它是根据这个标准进行订购的:插入顺序;它不可能提供你的定制标准。 –