繁体   English   中英

Java Hashmap:在打印映射值后,密钥没有相应地排序

[英]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

LinkedHashMap

Map接口的哈希表和链表实现,具有可预测的迭代顺序。 此实现与HashMap的不同之处在于,它维护贯穿其所有条目的双向链接列表。 此链表定义了迭代顺序,通常是将键插入映射的顺序(插入顺序)。

哈希图不保证顺序。 请参考以下链接。

Java 8哈希图

基于哈希表的Map接口的实现。 此实现提供所有可选的映射操作,并允许空值和空键。 (HashMap类与Hashtable大致等效,不同之处在于它是不同步的,并且允许为null。)该类不保证映射的顺序。 特别是,它不能保证顺序会随着时间的推移保持恒定。

使用TreeMapLinkedHashMap

我建议使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM