gpt4 book ai didi

java - Collection.Max 的打印输出

转载 作者:行者123 更新时间:2023-12-01 13:29:58 24 4
gpt4 key购买 nike

我有以下代码。 Collections.Max 返回 .如何通过 System.out.println() 显示字符串和整数的值?

public class SortMapOnKeyExample {

public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("sultan");
list.add("Masum");
list.add("sultan");
list.add("Sorry");
list.add("sultan");
list.add("Masum");
list.add("sultan");
list.add("Tarek");
list.add("sultan");

Set<String> uniques = new HashSet(list);
Map<String, Integer> counts = new HashMap<String, Integer>();

for (String elem : uniques)
{
counts.put(elem, Collections.frequency(list, elem));
}

Collections.max(counts.entrySet(), new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return (o1.getValue() - o2.getValue());
}
});

}

}

我尝试了很多,但不知道该怎么做?请帮助我。这段代码的目的是找到出现最多的字符串及其索引?

最佳答案

首先,您的代码将在 O(n^2) 时间内运行 - 每次调用 Collections.Frequency 都必须循环整个数据,并且只需完成一次对于每个元素。您可以轻松地实现此 O(n):

final Map<String, Integer> counts = new HashMap<>();
for (final String s : list) {
final Integer c = counts.get(s);
if (c == null) {
counts.put(s, 1);
} else {
counts.put(s, c + 1);
}
}

现在请注意,您可以拥有多个相同数量的商品。您需要按值对条目进行排序,然后打印排名靠前的条目:

final List<Entry<String, Integer>> entries = new ArrayList<>(counts.entrySet());
Collections.sort(entries, new Comparator<Entry<String, Integer>>() {

@Override
public int compare(final Entry<String, Integer> o1, final Entry<String, Integer> o2) {
return Integer.compare(o2.getValue(), o1.getValue());
}
});
final MessageFormat format = new MessageFormat("{0} has a count of {1,number,integer}");
final Iterator<Entry<String, Integer>> iter = entries.iterator();
final Entry<String, Integer> first = iter.next();
System.out.println(format.format(new Object[]{first.getKey(), first.getValue()}));
while (iter.hasNext()) {
final Entry<String, Integer> entry = iter.next();
if (entry.getValue() != first.getValue()) {
break;
}
System.out.println(format.format(new Object[]{entry.getKey(), entry.getValue()}));
}

首先,我们从 MapentrySet() 创建一个 List。接下来,我们对 List 进行排序 - 请注意比较的相反顺序 - 这意味着排序是降序而不是升序。另请注意 Integer.compare 的使用,这是因为使用 a - b 进行比较是非常糟糕的做法,因为如果 a 为较大且 b 较大且为负值;虽然这不是问题,但这不是一个好习惯。

现在我们将其作为 ListIterator 并继续打印元素,直到遇到一个不等于(必须小于)第一个元素的计数元素。

输出:

{sultan=5, Sorry=1, Tarek=1, Masum=2}
sultan has a count of 5

使用不同的数据,我们添加 Test 五次,输出也变为:

{Test=5, sultan=5, Sorry=1, Tarek=1, Masum=2}
Test has a count of 5
sultan has a count of 5

关于java - Collection.Max 的打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21626979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com