数组—如何在hashmap或java中的任何其他方法中存储key=string、value=arraylist?

uplii1fm  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(400)
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]}

我想在键值对中存储这种类型的表

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

如何只使用java来存储这种类型的表我也不知道如何迭代到这个表中。

4nkexdtk

4nkexdtk1#

你创造了 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);
 }

对于打印,请看 How to iterate a Map

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 而不是 HashMap , List 而不是 ArrayList ,对于定义,对于示例keep class

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

相关问题