【问题标题】:Sorting a HashTable by the values (including alphanumeric)按值(包括字母数字)对 HashTable 进行排序
【发布时间】:2011-08-24 00:57:24
【问题描述】:

我有一个带有字母数字值的HashTable。我想对它们排序
我怎样才能实现它?

【问题讨论】:

  • 欢迎使用 StackOverflow! 请尽量使您的问题标题尽可能简短/富有表现力。此外,帮助他人理解您的意思。谢谢! ;-)

标签: java sorting collections hashtable


【解决方案1】:

第一个问题 - 你的意思是对值进行排序,还是对键进行排序?

如果您只想按顺序访问排序后的值,最好的方法是创建一个列表或数组,然后排序。

对于值:Arrays.sort(table.values().toArray())Collections.sort(new ArrayList(table.values()))

对于密钥:Arrays.sort(table.keySet().toArray())Collections.sort(new ArrayList(table.keySet()))

有关这些排序方法的更多信息:Arrays.sort()Collections.sort()

如果你想重复使用基于排序的键,你最好使用TreeMap

如果您反复想根据排序值(而不是键)进行访问,那么您总是可以按顺序插入到 LinkedHashMap 中,这将保持顺序。

【讨论】:

    【解决方案2】:

    如果您不想创建一个新类来保存键/值关系并且您对 TreeMap 不感兴趣,那么类似以下的方法也可以:

    ArrayList<Entry<String,String>> list = new ArrayList<Entry<String,String>>();
    list.addAll(map.entrySet());
    
    Collections.sort(list, new Comparator<Entry<String,String>>() {
    
        @Override
        public int compare(Entry<String, String> o1, Entry<String, String> o2) {
            //your logic here;
        }
    
    });
    

    【讨论】:

      【解决方案3】:

      为什么?您可能选择了 HashTable 而不是 TreeMap,因为它具有更好的性能(并且没有排序)。如果您不想要性能而想要排序,请使用 TreeMap。

      【讨论】:

        【解决方案4】:

        HashTable 不保留订单。

        所以最好用它创建一个List 并对其进行排序。

        您需要将您的类型包装到一个类中,然后实现一个比较所有类型的值(在您的术语中)的 Comparator,

        class Foo implements Comparator<Foo>{
          private int no;
          private String alpha;
          //+getter/setters
        
          public int compare(Foo f1, Foo f2){
              //put your logic here
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2015-01-18
          • 2015-10-14
          • 1970-01-01
          • 1970-01-01
          • 2020-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多