Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java的映射中允许重复键? BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in)); Map Map=newlinkedhashmap(); line=br.readLine(); 而(!line.equals(“End”)){ 字符串[]arr2=行。拆分(“”); 字符串模型=arr2[1]; 双距离=Double.parseDouble(arr2[2]); 地图放置(型号、距离); line=br.readLine(); }_Java_String_Linkedhashmap - Fatal编程技术网

如何在java的映射中允许重复键? BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in)); Map Map=newlinkedhashmap(); line=br.readLine(); 而(!line.equals(“End”)){ 字符串[]arr2=行。拆分(“”); 字符串模型=arr2[1]; 双距离=Double.parseDouble(arr2[2]); 地图放置(型号、距离); line=br.readLine(); }

如何在java的映射中允许重复键? BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in)); Map Map=newlinkedhashmap(); line=br.readLine(); 而(!line.equals(“End”)){ 字符串[]arr2=行。拆分(“”); 字符串模型=arr2[1]; 双距离=Double.parseDouble(arr2[2]); 地图放置(型号、距离); line=br.readLine(); },java,string,linkedhashmap,Java,String,Linkedhashmap,我试图打印所有的键和值,尽管它们是重复的。 我的输入应该是 奥迪15.3 奥迪8.6 宝马45 结束 当我试图打印它,它给我只有(奥迪8.6和宝马45)。 我需要打印两次 地图中不能有重复的关键点。您所能做的最好是在值中有类似列表的内容。i、 e.Map=newhashmap()最好的方法是使用面向对象编程 创建新类 改变类型 从 致: 映射声明看起来像Map,这意味着只有一个Double值可以映射到String键 您只需将Double更改为List并将一个键映射到列表,您的案例如下所示: li


我试图打印所有的键和值,尽管它们是重复的。
我的输入应该是
奥迪15.3
奥迪8.6
宝马45
结束

当我试图打印它,它给我只有(奥迪8.6和宝马45)。

我需要打印两次

地图中不能有重复的关键点。您所能做的最好是在值中有类似列表的内容。i、 e.
Map=newhashmap()

最好的方法是使用面向对象编程

创建新类 改变类型 从

致:


映射声明看起来像
Map
,这意味着只有一个
Double
值可以映射到
String

您只需将
Double
更改为
List
并将一个键映射到列表,您的案例如下所示:

list.add(Result(model, distance));
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
Map Map=newlinkedhashmap();
line=br.readLine();
而(!line.equals(“End”)){
字符串[]arr2=行。拆分(“”);
字符串模型=arr2[1];
双距离=Double.parseDouble(arr2[2]);
列表距离=map.computeIfAbsent(model,key->newArrayList());
距离。添加(距离);
line=br.readLine();
}

这种结构更加正确,这意味着奥迪车型有一个不同距离的列表。键一和值列表。

在直接的Java映射中不能有重复的键。一种方法是,您可以使用它保存值的
列表,而不是单个值,并在打印结果时对其进行迭代:

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Map<String, List<Double>> map=new LinkedHashMap<>();
line=br.readLine(); 
while(!line.equals("End")) {
    String[] arr2=line.split(" ");
    String model=arr2[1];
    Double distance=Double.parseDouble(arr2[2]);
    List<Double> distances = map.computeIfAbsent(model, key -> new ArrayList<>());
    distances.add(distance);
    line=br.readLine();
}
BufferedReader be=新的BufferedReader(新的InputStreamReader(System.in));
Map Map=newlinkedhashmap();
line=br.readLine();
而(!line.equals(“End”)){
字符串[]arr2=行。拆分(“”);
字符串模型=arr2[1];
双距离=Double.parseDouble(arr2[2]);
map.computeIfAbsent(model,m->newLinkedList()).add(distance);
line=br.readLine();
}
然后,当您打印出来时:

for(Map.Entry:Map){
for(双d:entry.getValue()){
System.out.println(entry.getKey()+“”d);
}
}

这不是我最喜欢做的事情,但有一种变通方法允许在地图中重复。您正在使用的LinkedHashMap使用对象中定义的hashCode方法。 您可以围绕字符串创建一个包装类,而无需覆盖equals和hashCode的默认实现。这将允许您向集合中添加“重复项”,因为Java认为它们是不同的

示例类:

BufferedReader be = new BufferedReader(new InputStreamReader(System.in));
Map<String, List<Double>> map = new LinkedHashMap<>();
line=br.readLine();        
while(!line.equals("End")) {
    String[] arr2 = line.split(" ");
    String model = arr2[1];
    Double distance = Double.parseDouble(arr2[2]);
    map.computeIfAbsent(model, m -> new LinkedList<>()).add(distance);
    line = br.readLine();
}

地图中的关键点是唯一的。但是,您可以将一个双精度列表与一个键相关联。如何才能做到这一点?如果您这样做,则意味着您首先不需要地图。@Olivier如果您的集合中需要副本,则地图不是您所需要的。但是,我的回答仍然是对这个问题的回答。没有必要投否决票。
List<Result> list = new ArrayList<Result>();
map.put(model, distance);
list.add(Result(model, distance));
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Map<String, List<Double>> map=new LinkedHashMap<>();
line=br.readLine(); 
while(!line.equals("End")) {
    String[] arr2=line.split(" ");
    String model=arr2[1];
    Double distance=Double.parseDouble(arr2[2]);
    List<Double> distances = map.computeIfAbsent(model, key -> new ArrayList<>());
    distances.add(distance);
    line=br.readLine();
}
BufferedReader be = new BufferedReader(new InputStreamReader(System.in));
Map<String, List<Double>> map = new LinkedHashMap<>();
line=br.readLine();        
while(!line.equals("End")) {
    String[] arr2 = line.split(" ");
    String model = arr2[1];
    Double distance = Double.parseDouble(arr2[2]);
    map.computeIfAbsent(model, m -> new LinkedList<>()).add(distance);
    line = br.readLine();
}
public class StringWrapper {
   private String value;

   public StringWrapper(String value) {
      this.value = value;
   }

// getters and setters
// no equals and hashcode
}