微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 HashMap 或 Java 中的任何其他方法中存储 key=string、value=arraylist?

如何解决如何在 HashMap 或 Java 中的任何其他方法中存储 key=string、value=arraylist?

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,6]}

预期输出看起来像这样

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

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

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

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

解决方法

  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. 要打印,请查看 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 代替 HashMapList 代替 ArrayList,用于定义,用于实例化保持类

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。