[英]Java Hashmap: Keys not ordered accordingly after printing the values of the map
我写了一个使用Hashmap的小型Java程序。 程序提示输入3名雇员及其工资。 输入3名员工的工资后,我只想在控制台中简单地输出map键和值。 但是,我观察到输出的排序方式与我输入的方式不同。
样本输入
输入员工姓名1:> Dara
输入达拉的薪水:> 200
输入员工姓名2:> Logan
输入洛根的薪水:> 300
输入员工姓名3:> Agnes
输入洛根的薪水:> 300
输出看起来像这样:
艾格尼丝> 300.0
洛根> 300.0
达拉> 200.0
观察到Dara现在位于底部,Agnes位于顶部。 输入方式应该是相反的方式。 请在下面查看我的代码。
公共类地图{
static String name = "";
static double salary = 0;
static Scanner sc = new Scanner(System.in);
static Map<String, Double> m = new HashMap<String, Double>();
public static void main(String[] args) {
Maps ms = new Maps();
int count = 1;
while(count <= 3){
System.out.println("Enter employee " + count);
name = sc.next();
System.out.println("------------------");
System.out.println("Enter salary for " + name);
salary = sc.nextDouble();
System.out.println("\n");
m.put(name, salary);
count += 1;
}
ms.displayMap();
}
public void displayMap(){
System.out.println("========================");
**I think the issue lies in here**
for(Entry<String, Double> employee : m.entrySet()){
String key = employee.getKey();
Double value = employee.getValue();
System.out.println(key + " \t " + value);
}
}
}
如果要保持元素插入的顺序相同,则需要使用LinkedHashMap
。
Map接口的哈希表和链表实现,具有可预测的迭代顺序。 此实现与HashMap的不同之处在于,它维护贯穿其所有条目的双向链接列表。 此链表定义了迭代顺序,通常是将键插入映射的顺序(插入顺序)。
哈希图不保证顺序。 请参考以下链接。
基于哈希表的Map接口的实现。 此实现提供所有可选的映射操作,并允许空值和空键。 (HashMap类与Hashtable大致等效,不同之处在于它是不同步的,并且允许为null。)该类不保证映射的顺序。 特别是,它不能保证顺序会随着时间的推移保持恒定。
使用TreeMap或LinkedHashMap 。
我建议使用LinkedHashMap或TreeMap。 LinkedHashMap保留键的插入顺序,而TreeMap则通过Comparator或元素的自然Comparable顺序进行排序。
由于不必对元素进行排序,因此在大多数情况下,LinkedHashMap应该更快。 根据Javadocs,TreeMap的containsKey,get,put和remove的性能为O(log n),而LinkedHashMap的每种性能均为O(1)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.