为什么我的hashmap没有按时间顺序打印?

jw5wzhpr  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(412)

为什么我的输出不是按时间顺序的,或者它不是按用户输入的,基于输出我发现它像随机输入的值,我怎么能按时间顺序打印我的Map的值,而不使用treemap排序我只是使用hashmap和map包,所以你认为在这个逻辑错误中发生了什么?如何使用hashmap来满足预期的输出?有可能吗?

import java.util.Scanner;
    import java.util.Map;
    import java.util.HashMap;

    public class StudentList
    {
        public static void main(String[] args) 
        {
            Scanner sc = new Scanner(System.in);
            Map<String,String> students = new HashMap<>();

            for (int x=1; x<=3; x++) 
            {
                System.out.print("Enter student number " + x + ": ");
                String studnum = sc.nextLine();
                System.out.print("Enter first name " + x + ": ");
                String studfname = sc.nextLine();

                students.put(studnum, studfname);
                if (x==3) 
                {
                    System.out.println("\nPlease hit ENTER");
                    String enter = sc.nextLine();
                    if (enter.equals("")) {
                        System.out.println("Processing...");
                        students.remove(studnum,studfname);
                        System.out.println("3rd entry removed!\n");
                        System.out.print("Enter student number 3: ");
                        String studnum1 = sc.nextLine();
                        System.out.print("Enter first name 3: ");
                        String studfname1 = sc.nextLine();
                        students.put(studnum1, studfname1);
                }
                else
                {
                    System.out.println("Invalid Please Try again....");
                }
                }

            }
            System.out.println("\nStudent List: ");
            for (Map.Entry e : students.entrySet()  ) 
            {

                System.out.println(e.getKey() + " : " + e.getValue());
            }
        }
    }

输出:

Enter student number 1: 2018-0004
Enter first name 1: Mark
Enter student number 2: 2018-0017
Enter first name 2: Nika
Enter student number 3: 2018-0134
Enter first name 3: Mairo

Please hit ENTER

Processing...
3rd entry removed!

Enter student number 3: 2018-0134
Enter first name 3: Mairo

Student List:
2018-0017 : Nika
2018-0004 : Mark
2018-0134 : Mairo

预期产量:

Enter student number 1: 2018-0004
Enter first name 1: Mark
Enter student number 2: 2018-0017
Enter first name 2: Nika
Enter student number 3: 2018-0134
Enter first name 3: Mairo

Please hit ENTER

Processing...
3rd entry removed!

Enter student number 3: 2018-0134
Enter first name 3: Mairo

Student List:
2018-0004 : Mark
2018-0017 : Nika
2018-0134 : Mairo
t98cgbkg

t98cgbkg1#

它不属于 HashMap ,但您可以使用java流执行以下操作来对其进行排序:

map.entrySet().stream().sorted((s1, s2) -> s1.getKey().compareTo(s2.getKey()))
      .forEach(s -> System.out.println(s.getKey() + " : " + s.getValue()));
ldioqlga

ldioqlga2#

对于时间顺序,您应该使用 LinkedHashMap .
这是不同的数据结构。 HashMap 不记得插入顺序。

k3bvogb1

k3bvogb13#

你问:
为什么我的hashmap没有按时间顺序打印?
为什么我的输出不是按时间顺序排列的,或者不是按用户输入的顺序排列的
因为这样的排序不是那个类的特征。为什么我的微波炉不洗碗? HashMap 不保证迭代顺序。如果您关心迭代顺序,请使用 Map .
引用 HashMap javadoc公司:
这个类不保证Map的顺序;特别是,它不能保证随着时间的推移,订单将保持不变。
如果要按键的自然顺序排列贴图,请使用 SortedMap 或者 NavigableMap . TreeMap 就是这样一种实现。你莫名其妙地拒绝使用 TreeMap 这对我来说毫无意义。如果你想开车,不要拒绝提供车辆。
如果要按原始插入顺序排列贴图,请使用 LinkedHashMap .
下面是我制作的一个图表,显示了 Map 与java捆绑的实现。注意迭代顺序列。

相关问题