Java 在HashMap中,当我试图检索与键相关的值对时,我得到了整个列表

Java 在HashMap中,当我试图检索与键相关的值对时,我得到了整个列表,java,arraylist,collections,hashmap,Java,Arraylist,Collections,Hashmap,在这个程序中,当我运行map.get(“b”)时,我得到了整个列表,但我只需要与键“b”相关的值对。帮我解决它 package test1; import java.util.*; public class Test1 { public static void main(String[] args) { Scanner in = new Scanner(System.in);//scanner object

在这个程序中,当我运行map.get(“b”)时,我得到了整个列表,但我只需要与键“b”相关的值对。帮我解决它

    package test1;
    import java.util.*;
    public class Test1 {

        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);//scanner object
            Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();//map
            List<Integer> times = new ArrayList<Integer>();//arraylist

            int exit = 0;
            int stime;
            int etime;
            String [] letters = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
                "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
            for(int x = 0; exit == 0 ; x++){
                    System.out.println("Enter 1 -> ");
                    stime = in.nextInt();
                    System.out.println("Enter 2 --> ");
                    etime = in.nextInt();
                    if(stime == -1 || etime == -1){
                        exit = -1;
                    }
                    times.add(stime);
                    times.add(etime);
                    map.put(letters[x],times);
           }

            System.out.println(map.get("b"));

        }
}
包测试1;
导入java.util.*;
公共类Test1{
公共静态void main(字符串[]args){
Scanner in=新扫描仪(System.in);//扫描仪对象
Map Map=newhashmap();//映射
列表时间=新建ArrayList();//ArrayList
int exit=0;
时间;
国际时间;
字符串[]字母={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”,
“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”、“x”、“y”、“z”};
对于(int x=0;exit==0;x++){
System.out.println(“输入1->”);
stime=in.nextInt();
System.out.println(“输入2-->”);
etime=in.nextInt();
如果(时间==-1 | |时间==-1){
出口=-1;
}
时间。添加(时间);
添加(时间);
地图放置(字母[x],时间);
}
System.out.println(map.get(“b”);
}
}

问题在于
数组列表
for
循环外部初始化。下面的方法应该有效

   for(int x = 0; exit == 0 ; x++){
            System.out.println("Enter 1 -> ");
            stime = in.nextInt();
            System.out.println("Enter 2 --> ");
            etime = in.nextInt();
            if(stime == -1 || etime == -1){
                exit = -1;
            }
            List<Integer> times = new ArrayList<Integer>();//arraylist
            times.add(stime);
            times.add(etime);
            map.put(letters[x],times);
   }
for(int x=0;exit==0;x++){
System.out.println(“输入1->”);
stime=in.nextInt();
System.out.println(“输入2-->”);
etime=in.nextInt();
如果(时间==-1 | |时间==-1){
出口=-1;
}
列表时间=新建ArrayList();//ArrayList
时间。添加(时间);
添加(时间);
地图放置(字母[x],时间);
}
下面使用Apache Commons Lang库中的Pair数据结构:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);//scanner object
    Map<String, Pair> map = new HashMap<>();//map


    int exit = 0;
    int stime;
    int etime;
    String [] letters = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
    for(int x = 0; exit == 0 ; x++){
            System.out.println("Enter 1 -> ");
            stime = in.nextInt();
            System.out.println("Enter 2 --> ");
            etime = in.nextInt();
            if(stime == -1 || etime == -1){
                exit = -1;
            }
            map.put(letters[x],Pair.of(stime, etime));
   }

    System.out.println(map.get("b"));
}
publicstaticvoidmain(字符串[]args){
Scanner in=新扫描仪(System.in);//扫描仪对象
Map Map=newhashmap();//映射
int exit=0;
时间;
国际时间;
字符串[]字母={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”,
“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”、“x”、“y”、“z”};
对于(int x=0;exit==0;x++){
System.out.println(“输入1->”);
stime=in.nextInt();
System.out.println(“输入2-->”);
etime=in.nextInt();
如果(时间==-1 | |时间==-1){
出口=-1;
}
map.put(字母[x],一对(时间,时间));
}
System.out.println(map.get(“b”);
}

您可能希望在for循环中实例化您的
列表时间。现在,您将所有的
stime
etime
值放在同一个列表中,而不是一个单独的列表。
times
是一个列表,在您的
map
中,
map
@Kayman!真管用!多谢了,就是这样!有没有办法将我从map.get(“b”)中获得的一对值分配给两个变量?ApacheLangAPI有一个名为的对象,用于此目的。你能看一下吗?当然可以!谢谢!事实上我已经用这对更新了答案。。。如果你还没看的话。。。如果你觉得这个解决方案有帮助,记得接受答案。这可以帮助其他人知道解决方案已经可用。事实上,我如何导入ApacheCommonsLang库?