如何在JAVA中的ArrayList中找到最少和最常见的名称

时间:2014-09-11 05:49:55

标签: java arraylist

我无法在ArrayList中找到最常用和最不常见的名称。该公式应该通过一个名称文件,并计算列表中有多少常用名称,然后打印最少和最常见的名称。我已经完成了最多的ArrayList部分,它只是找到了我遇到麻烦的最常见和最不常见的名字。我不知道如何启动它。我试图在网上看但却找不到任何东西。我试图弄明白,但这是我能想到的就是使用.equals。

for (int i = 0; i< dogs.size(); i++)
if dogs.get(0).getName().equals dogs.get(i).getName();
{

}

2 个答案:

答案 0 :(得分:1)

  • 创建Map<String, Integer>
  • 循环浏览ArrayList,检查Map是否包含name,如果包含Map,请将值递增并将其重新放回Map,它没有,创建一个新的条目并将其放入。

这将为您提供名称列表和出现的次数。运行此列表(List<Dog> dogs = new ArrayList<>(25); Map<String, Integer> dogNames = new HashMap<>(25); for (Dog dog : dogs) { Integer value = dogNames.get(dog); if (value == null) { value = 0; } value++; dogNames.put(dog.getName(), value); } int leastCommon = Integer.MAX_VALUE; String leastCommonName = null; for (String name : dogNames.keySet()) { int value = dogNames.get(name); if (value < leastCommon) { leastCommon = value; leastCommonName = name; } } System.out.println("Least common (" + leastCommon + ") is " + leastCommonName); )并检查哪一个具有最低计数,然后跟踪名称...

例如......

{{1}}

答案 1 :(得分:1)

使用Map收集数据,然后使用Collections API查找最低数据:

List<Dog> dogs; // populate
Map<String, Integer> counts = new HashMap<>();
for (Dog dog : dogs) {
    Integer count = counts.get(dog.getName());
    counts.put(dog.getName(), count == null ? 1 : count + 1);
}

List<Map.Entry<String, Integer>> entries = new ArrayList<>(counts.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
        return Integer.compare(o2.getValue(), o1.getValue()); // Note reverse order
    }
});
String leastCommonName = entries.get(0).getKey();
int leastCommonFrequency = entries.get(0).getValue();

这是找到最少使用名称的java 8版本:

Map.Entry<String, Integer> min = counts.entrySet().stream()
    .min((o1, o2) -> Integer.compare(o1.getValue(), o2.getValue())).get();

String leastCommonName = min.getKey();
int leastCommonFrequency = min.getValue();

基本上避免了列表创建和排序,取而代之的是使用同一个比较器从一个流(条目)中找到最小值的一行,但是作为一个lambda表达式。