如何在 Java 映射中找到最大值

原文:https://www.studytonight.com/java-examples/how-to-find-maximum-value-in-java-map

在本文中,我们将学习对 Java 映射的元素进行排序。映射以键值对的格式存储数据,除此之外,它还存储在随机的位置,这就是为什么在 Java 的映射中很难找到最大值的原因。

在 Java 映射中寻找最大价值的挑战

  • Java 中的 Map 将值存储在随机位置。
  • 因为它以键值格式存储数据,所以有必要决定应该考虑哪个因素进行比较。

让我们通过一个 Java 中使用Map的程序来理解。在下面给出的程序中,我们创建了一个Map,它将以键值格式存储每个相应课程的价格。

import java.util.*;
public class StudyTonight
{
    public static void main(String args[])
    {
        Map<String,Integer> coursePrice = new HashMap<>();
        coursePrice.put("Java",5000);
        coursePrice.put("Python",3000);
        coursePrice.put("CPP",4000);
        coursePrice.put("Android",8000);
        System.out.println(coursePrice);
    }
}

enlightened不要忘记导入java.util.*;包,否则编译器会给出错误。

{Java=5000,CPP=4000,Python=3000,Android=8000}

现在,很明显会想哪道菜最便宜?哪门课贵?

在编程世界中,我们通过简单地找到最大值和最小值来解决这些情况。在讨论实际解决方案之前,让我们讨论迭代解决方案。

求映射最大值的迭代解法

在这个程序中,我们创建了一个映射类型的空条目,然后迭代映射的所有值。每当我们得到一个更大的值或空值时,我们就把它赋给 Entry,并在最后简单地打印 Entry 的值。

import java.util.*;
public class StudyTonight
{
    public static void main(String args[])
    {
        Map<String,Integer> coursePrices = new HashMap<>();
        Map.Entry<String,Integer> maxPrice = null;

        coursePrices.put("Java", 5000);
        coursePrices.put("Python", 3000);
        coursePrices.put("CPP", 4000);
        coursePrices.put("Android", 8000);

        for(Map.Entry<String,Integer> price:coursePrices.entrySet())
        {
            if (maxPrice == null || price.getValue().compareTo(maxPrice.getValue()) > 0)
            {
                maxPrice = price;
            }
        }
        System.out.println("Maximum price is: "+maxPrice.getValue());
    }
}

最高限价为:8000

在映射中查找最大值的示例

在这里,我们简单地使用Map.values()传递了 Map 的所有值,其他的工作由 Java 中的Collections类自动完成。

本示例将打印映射上显示的最高价格。

import java.util.*;
public class StudyTonight
{
    public static void main(String args[])
    {
        Map<String,Integer> coursePrice = new HashMap<>();
        coursePrice.put("Java",5000);
        coursePrice.put("Python",3000);
        coursePrice.put("CPP",4000);
        coursePrice.put("Android",8000);
        System.out.println("maximum price is : "+ Collections.max(coursePrice.values()));
    }
}

最高限价为:8000

如果我们想找到最大映射键而不是值呢?

在这种情况下,我们只需要传递方法 Map.keySet()而不是 Map.values(),下面给出了实现这种情况的代码,其中所有课程价格都是键,课程名称都是值。所以,我们在 Collection.max()方法中传递了 Map.keySet()。

import java.util.*;
public class StudyTonight
{
    public static void main(String args[])
    {
        Map<Integer,String> coursePrice = new HashMap<>();
        coursePrice.put(5000,"Java");
        coursePrice.put(3000,"Python");
        coursePrice.put(4000,"CPP");
        coursePrice.put(8000,"Android");
        System.out.println("maximum price is : "+ Collections.max(coursePrice.keySet()));
    }
}

最高限价为:8000

结论:

在本文中,我们学习了使用Collections类或传统的迭代比较方法在 Java Map 中查找最大值。Map 为访问时间提供 O(1),但为从中找到最大元素提供 O(n)。