Java 在Hashmap中查找多个最大值

Java 在Hashmap中查找多个最大值,java,hashmap,max,Java,Hashmap,Max,请你帮我找出为什么这个代码只显示一个姓氏,我需要显示所有具有最大值的人 我做了测试,发现它找到了最大值,它进行了比较,但只显示了一个姓氏 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.*; public class Solution { public static void main(String[] args) throws

请你帮我找出为什么这个代码只显示一个姓氏,我需要显示所有具有最大值的人 我做了测试,发现它找到了最大值,它进行了比较,但只显示了一个姓氏

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader(args[0]));
        TreeMap<String, Double> map = new TreeMap<>();
        ArrayList<String> sArray = new ArrayList<>();

        while (reader.ready()) {
            String st = reader.readLine();
            sArray.add(st);
        }


        for (String s : sArray) {
            String[] array = s.split(" ");
            String name = array[0];
            double price = Double.parseDouble(array[1]);
            if (map.containsKey(name)) {
                price = price + map.get(name);
            }
            map.put(name, price);
        }

        Double maxValueInMap = (Collections.max(map.values()));  // This will return max value in the Hashmap
        System.out.println(maxValueInMap);
        for (Map.Entry<String, Double> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue() + " | " + (entry.getValue()==maxValueInMap));// Itrate through hashmap
            if (entry.getValue() == maxValueInMap) {
                System.out.println(entry.getKey());     // Print the key with max value
            }
        }

        reader.close();
    }
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.*;
公共类解决方案{
公共静态void main(字符串[]args)引发IOException{
BufferedReader=new BufferedReader(new FileReader(args[0]);
TreeMap map=newtreemap();
ArrayList sArray=新的ArrayList();
while(reader.ready()){
字符串st=reader.readLine();
添加(st);
}
用于(字符串s:sArray){
字符串[]数组=s.split(“”);
字符串名称=数组[0];
double price=double.parseDouble(数组[1]);
if(地图容器(名称)){
price=price+map.get(name);
}
地图。放置(名称、价格);
}
Double maxValueInMap=(Collections.max(map.values());//这将在Hashmap中返回最大值
System.out.println(maxValueInMap);
对于(Map.Entry:Map.entrySet()){
System.out.println(entry.getKey()+“-”+entry.getValue()+“|”+(entry.getValue()==maxValueInMap));//通过hashmap对其进行测试
if(entry.getValue()==maxValueInMap){
System.out.println(entry.getKey());//使用最大值打印密钥
}
}
reader.close();
}

您应该将数字对象与
.equals()
进行比较,而不是与
=
进行比较:

for (Map.Entry<String, Double> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue() + " | " + (entry.getValue().equals(maxValueInMap)));// Itrate through hashmap
            if (entry.getValue().equals(maxValueInMap)) {
                System.out.println(entry.getKey());     // Print the key with max value
            }
        }
for(Map.Entry:Map.entrySet()){
System.out.println(entry.getKey()+“-”+entry.getValue()+“|”+(entry.getValue().equals(maxValueInMap));//通过hashmap对其进行读取
if(entry.getValue().equals(maxValueInMap)){
System.out.println(entry.getKey());//使用最大值打印密钥
}
}

您应该将数字对象与
.equals()
进行比较,而不是与
=
进行比较:

for (Map.Entry<String, Double> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue() + " | " + (entry.getValue().equals(maxValueInMap)));// Itrate through hashmap
            if (entry.getValue().equals(maxValueInMap)) {
                System.out.println(entry.getKey());     // Print the key with max value
            }
        }
for(Map.Entry:Map.entrySet()){
System.out.println(entry.getKey()+“-”+entry.getValue()+“|”+(entry.getValue().equals(maxValueInMap));//通过hashmap对其进行读取
if(entry.getValue().equals(maxValueInMap)){
System.out.println(entry.getKey());//使用最大值打印密钥
}
}

如果您只想返回价格最高的名称,最好将价格映射到名称(通过将价格映射到一组名称或使用guava的多重映射)

您甚至可以通过只保留一组名称和一个变量来跟踪最昂贵的名称来做得更好。
当您遇到比当前最昂贵的名称更昂贵的名称时,请“重置”要返回的名称集。

如果您只想返回价格最高的名称,最好将价格映射到名称(通过将价格映射到一组名称或使用guava的多重映射)

您甚至可以通过只保留一组名称和一个变量来跟踪最昂贵的名称来做得更好。
当您遇到比当前最昂贵的名称更昂贵的东西时,“重置”您将返回的集合。

您可以包括您的程序生成的输出吗?这里是:)3.0зззз-2.5|假ззззз-3.0з假ааа-2.0ӡ假ааааа-3.0|false对于Rus中的姓氏很抱歉,无法以更可读的方式添加它,但是您可能注意到,对于那些将
实例与
等于
而不是
=
进行比较的最大值为3.0的人来说,它显示为false,您可以包含程序生成的输出吗?这里是:)3.0бзззз-2.5 | falseзз-3.0 |真|假|假|假|假|假|假|假|假|假|假| | |假| | | | | | | | | | | | | | | | |假| | | | | | | | | | | | | | |ximum to 3.0尝试将
Double
实例与
equals
进行比较,而不是
=
谢谢,我也有这个想法,但没有检查,因为我认为为什么我需要将equals与Double一起使用是一个对象,这就是为什么谢谢你,我也有这个想法,但没有检查为什么我需要将equals与Double一起使用le是一个对象,这就是为什么谢谢你,Roy,我试图将名称添加到一个单独的ArrayList,但问题是==正如我现在看到的是,我的答案是建议提高解决方案的时间复杂性。当然,你遇到的问题是由于使用==而不是equals:)谢谢你,Roy,我试图将名称添加到一个单独的ArrayListrayList,但问题在于==正如我现在看到的是的,我的答案是建议改进解决方案的时间复杂性。当然,您遇到的问题是由于使用==而不是equals:)