在Vector中实现排序

时间:2011-04-18 13:17:38

标签: java android sorting collections adapter

我有一个收藏品

Vector<HashMap<String, String>>

实际上我使用它作为android中的列表视图的列表项。我使用了SortedMap但是我得不到正确的结果。我认为这是因为HashMap的结构是

hashMap.add("Name","value_of_name"); 
hashMap.add("Counts","value_of_counts");

现在我将它添加到Vector。

我想通过hashMap的Name键对vector的元素进行排序。 我知道Collection.sort,我可以使用ArrayList和POJO类对此进行排序。但我不知道如何将其与adapter

ListView一起使用

如何对元素进行排序?还有更好的解决方案(关于我的收集数据结构,可以很容易地与适配器一起使用)?

5 个答案:

答案 0 :(得分:2)

您需要一个实现Comparator<HashMap<String,String> >并将排序顺序的逻辑放在其compare方法中。

答案 1 :(得分:1)

不确定我是否理解正确。这将在地图的一个键上对矢量进行排序。

Collections.sort(yourVector, new Comparator<HashMap<String,String>>() {
    public int compare(HashMap<String,String> a, HashMap<String,String> b) {
        return a.get(yourKey).compareTo(b.get(yourKey));
    }
});

答案 2 :(得分:1)

您是否从未考虑过查看java.util包中的集合?

然后您会发现Treemap已经为Comparable项实现了平衡树排序,比如String is。

因此,要对您的商品进行排序,只需使用HashMap重新展示您的TreeMap,所有工作都将完成。

BTW这个载体在这里做了什么?他们是Java 1.1(换句话说,十五岁)

答案 3 :(得分:0)

使用TreeMap的最佳(最快)方式。如果您使用正确的Comperator为其提供,则将对TreeMap中的所有项进行排序。

重要的问题:为什么你有一个HashMaps矢量?

答案 4 :(得分:0)

如果要对数组中的地图进行排序,请使用SortedMapTreeMapConcurrentSkipListMap实施。这将获取HashMaps的向量,并返回SortedMaps的ArrayList(非同步和更快的集合)。

public ArrayList<SortedMap<String, String>> sortMaps(Vector<HashMap<String, String> maps) {
    ArrayList<TreeMap<String, String>> returnMaps = new ArrayList<TreeMap<String, String>>();
    for(HashMap<String, String> theMap : maps) {
        // TreeMap is a sorted map and this will use the default String.compareTo
        TreeMap<String, String> newMap = new TreeMap<String, String>();
        // put all the items from the HashMap into the TreeMap, which will autosort
        newMap.putAll(theMap);
        returnMaps.add(newMap);
    }
    return returnMaps;
}

要通过哈希映射的第一个键(最低键,按字母顺序排序)对Vector进行排序,请在返回行之前尝试以下操作:

    // this sorts the vector by first keys
    Collections.sort(returnMaps, new Comparator<SortedMap<String,String>>() {
        public int compare(SortedMap<String,String> a, HashMap<String,String> b) {
            return a.firstKey().compareTo(b.firstKey());
        }
    });

或者,如果您想按最后一个键排序(最高键,按字母顺序排列):

    // this sorts the vector by first keys
    Collections.sort(returnMaps, new Comparator<SortedMap<String,String>>() {
        public int compare(SortedMap<String,String> a, HashMap<String,String> b) {
            return a.lastKey().compareTo(b.lastKey());
        }
    });

返回所有键的一个有序地图(将踩踏任何重复项):

public SortedMap<String, String> singledSortedMap(Vector<HashMap<String, String> maps) {
    // this will end up with all the values, sorted by natural string ordering
    SortedMap<String, String> returnMap = new TreeMap<String, String>();
    for(HashMap<String, String> theMap : maps) {
        returnMap.putAll(theMap);
    }
    return returnMap;
}