Java-按字典顺序对hashmap / TreeMap进行排序

时间:2019-03-22 09:40:28

标签: java sorting hashmap treemap

我正在练习使用哈希图,我想按字典顺序排序。目前,我已经成功地完成了一份清单。这是列表的代码:

public class UsoUserlistaordenada {
        public static void inLista(ArrayList<User> l, User u ) throws Exception {
            // System.out.println(u.getName() +"/"+u.getShell());
            for(User u1 : l){
              int r = u1.getName().compareTo(u.getName());
              if(r==0) {
                return;
              }
              if(r>0) {
                l.add(l.indexOf(u1),u);
                return;
              }
            }
//            System.out.println(u.getName() +"/"+u.getShell());
            l.add(u);
            return;
          }
        public static void main(String[] args) throws Exception {
          String line = null;
          ArrayList<User> lista = new ArrayList<User>();
          try (BufferedReader br = new BufferedReader(new FileReader("file"))) {
             while ((line = br.readLine()) != null) {
               String[] parts = line.split(":");
               String nombre_us = parts[0];
               String id_grupo = parts[3];
               String shell = parts[6];
               User u = new User(nombre_us,id_grupo,shell);
               inLista(lista,u);
               //System.out.println(u.getName() +"/"+u.getShell());
             }
             int index=0;
             for(User s : lista){
             System.out.println(String.valueOf(index++)+": "+s);
              }
          }
          catch (Exception ex)
          {
           ex.printStackTrace();
          }
        }
}

我想这样做,但要使用哈希图。在这种情况下,我想使值最小的那个具有键0,依此类推。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

请参见HashMap vs TreeMap

  

HashMap不能对元素的方式提供任何保证   在地图中排列

我也不认为TreeMap对您来说是一个很好的解决方案。排序将通过键而不是值进行:

public static void main(String args[])
{
    String[] input = {"a", "b", "f", "h", "e", "aa"};

    int i = 0;
    Map<Integer, String> map = new TreeMap<>();
    for(String s: input) {
        map.put(i++, s);
    }

    System.out.println(map);
}

如果键是整数,为什么不使用简单数组或列表?

public static void main(String args[])
{
    String[] input = {"a", "b", "f", "h", "e", "aa"};

    List<String> list = new ArrayList<>(Arrays.asList(input));
    list.sort(Comparator.naturalOrder());
    System.out.println(list);
}

如果需要在插入时进行排序,则可以使用TreeSet。它可以为您排序,并且可以轻松转换为数组或列表:

public static void main(String args[])
{
    String[] input = {"a", "b", "f", "h", "e", "aa"};

    Set<String> set = new TreeSet<>();
    set.addAll(Arrays.asList(input));

    System.out.println(set);

    String[] array = set.toArray(new String[0]);
    System.out.println(array[0]);

    List<String> list = new ArrayList<>(set);
    System.out.println(list.get(0));
}

其余为comparator进行排序。您可以使用Comparator.comparing(User::getName)或实现comparable接口。