通用数据结构上的Collections.sort()无法正常工作

时间:2017-05-25 05:27:34

标签: java sorting collections

我被要求创建一个toArray方法,它应该分别返回一个Iterator或数组,其元素按其“add”计数(HashMap中的值)按升序排序。

但是,我收到以下错误消息,并且不知道如何修复它:

  

类型集合中的方法sort(List< T>,Comparator<?super T>)不适用于参数(Set< Map.Entry< T,Integer>>,new Comparator< Map.Entry< T,整数>>(){})

所以我似乎必须覆盖或创建排序方法。有人可以帮助我指出正确的方向吗?

public class OccurenceSet<T> implements Set<T>{

     private HashMap<T,Integer> data;

     public OccurenceSet(){
         this.data = new HashMap<T,Integer>();
     }

     @Override
     public Object[] toArray() {

         Set<Map.Entry<T,Integer>> dataSet = data.entrySet();
         ArrayList<Map.Entry<T,Integer>> dataList = new ArrayList<>(dataSet);
         Collections.sort(dataSet, new Comparator<Map.Entry<T,Integer>>() {
              @Override
              public int compare(Map.Entry<T,Integer> o1, Map.Entry<T, Integer> o2) {
                  return o1.getValue().compareTo(o2.getValue());
              }
          });

      return null;
    }
}

2 个答案:

答案 0 :(得分:2)

HashMap并不是要按排序顺序保留条目,但是如果必须根据键或值对HashMap进行排序,则可以使用Java进行排序。

  1. 通过调用Map
  2. 的entrySet()方法获取所有条目
  3. 创建自定义比较器以根据值对条目进行排序。
  4. 将条目集转换为列表。
  5. 通过传递值比较器
  6. ,使用Collections.sort()方法对条目列表进行排序
  7. 通过按排序顺序添加条目来创建LinkedHashMap。

答案 1 :(得分:2)

  

&#34;类型集合中的方法sort(List,Comparator)不是   适用于参数(Set&gt;,new Comparator&gt;(){})&#34;

您收到此异常,因为Collections#sort方法只能接受 List<T> 而不是设置

此处提供更多信息:Collections#sort Method