我正在练习使用哈希图,我想按字典顺序排序。目前,我已经成功地完成了一份清单。这是列表的代码:
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,依此类推。你能帮我吗?
答案 0 :(得分:0)
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接口。