如何在 HashMap 或 java 中存储 key=string, value=arraylist 或任何其他方法?

How to store key=string, value=arraylist in HashMap or any other method in java?

public class Hashmapeg {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    HashMap<String, ArrayList<Integer>> marksTable = new HashMap<String, ArrayList<Integer>>();
    ArrayList<Integer> marks = new ArrayList<>();
    int marksSub;
    
    for(int j = 0; j < 2; j++){
        System.out.print("\nEnter name " + j + " = ");
        String name = sc.nextLine();

        for(int i = 0; i < 3; i++){
            System.out.print("Enter marks " + i + " = ");
            marksSub = sc.nextInt();
            marks.add(marksSub);
        }
        marksTable.put(name, marks);
    }

    System.out.println(marksTable);
    sc.close();
}}

输出

Enter name 0 = abc
Enter marks 0 = 1
Enter marks 1 = 2
Enter marks 2 = 3

Enter name 1 = Enter marks 0 = 4
Enter marks 1 = 5
Enter marks 2 = 6
{=[1, 2, 3, 4, 5, 6], abc=[1, 2, 3, 4, 5, 6]}

预期输出看起来像这样

{name1=[1,2,3], name2=[4,5,6]}

我想把这种table存入键值对

-------------------------------------
|   name1   |   35  |   23  |   12  |
|   name2   |   45  |   20  |   10  |
-------------------------------------

我如何仅使用 java 存储这种类型的 table 我也不知道如何迭代它。

  1. 你在循环外创建了marks,所以使用了相同的ArrayList,只有一个,你需要在每次迭代时创建一个新的。

    也更喜欢 Integer.parseInt(sc.nextLine()) 作为 sc.nextInt() 因为你不想正确处理换行符(这就是导致输出中的空名称的原因)

     for (int j = 0; j < 2; j++) {
         System.out.print("\nEnter name " + j + " = ");
         String name = sc.nextLine();
         marks = new ArrayList<>();
         for (int i = 0; i < 3; i++) {
             System.out.print("Enter marks " + i + " = ");
             marks.add(Integer.parseInt(sc.nextLine()));
         }
         marksTable.put(name, marks);
     }
    
  2. 要打印,看一下

     Map<String, List<Integer>> marksTable = Map.of(
             "name1", Arrays.asList(1, 2, 3),
             "name2", Arrays.asList(4, 5, 6),
             "name3", Arrays.asList(7, 8, 9)
     );
    
     System.out.println("---------------------");
     for (Map.Entry<String, List<Integer>> entry : marksTable.entrySet()) {
         String values = entry.getValue().stream().map(Object::toString).collect(Collectors.joining(" | "));
         System.out.println("| " + entry.getKey() + " | " + values + " |");
     }
     System.out.println("---------------------");
    

也更喜欢更通用的定义,Map而不是HashMapList而不是ArrayList,对于定义,对于实例保持类

Map<String, List<Integer>> marksTable = new HashMap<>();
List<Integer> marks;