【问题标题】:How to Count Matched Elements in ArrayList in Java如何在 Java 中计算 ArrayList 中的匹配元素
【发布时间】:2011-05-30 14:48:30
【问题描述】:

我对如何在 java 中计算 ArrayList 中的匹配元素有疑问。 例如:我的 ArrayList 包含 [sport, sport, ball , player, sport]

我需要输出如下:

word sport frequency 3
word ball  frequency 1
word player frequency 1

感谢提前

【问题讨论】:

  • 想象一下,您一次只能在该数组列表中看到一项。想象一下。你将如何解决这个问题?

标签: java collections arraylist


【解决方案1】:

使用地图:

Map<String, Integer> occurrencies = new HashMap<String, Integer>();
for (String word : list) {
    occurrencies.put(word, occurrencies.containsKey(word)
    ? occurrencies.get(word) + 1 : 1);
}
for (Entry<String, Integer> entry : occurrencies.entrySet()) {
    System.out.println("Word: "+entry.getKey()
                     + ", occurences: "+entry.getValue());
}

如果您希望单词按字母顺序排序,请使用TreeMap 而不是HashMap

(当然,正如其他人所建议的那样,使用 Guava Multiset 会容易得多)

【讨论】:

    【解决方案2】:

    如果您愿意引入外部依赖项:Google Guava 库包含 Multiset 的各种实现,这是您想要的东西的名称。如果您不愿意为此依赖库,您至少可以查看源代码。 Multiset 基本上是某种类型的 Map 到一个整数,它保存集合中特定项目的计数。

    当然,我假设您实际上能够用 Multiset 替换您的 ArrayList。

    【讨论】:

    • Guava Multiset +1,尽管我怀疑 OP 是否已准备好使用像 Guava 这样复杂的库
    • 当Java有Map&lt;K,V&gt;时为什么要使用外部库?
    • @MarcoS:通常(在实际应用程序中使用)Multiset 有一个比Map API 更适合此的 API。但是,我同意 OP 可能不需要它来完成他们示例中的简单任务(特别是如果它是家庭作业)。
    • @Sean:是的,我认为你是对的。使用您的解决方案,OP 可能会更好。
    【解决方案3】:

    将内容复制到另一个数据结构中:

    Map<String, Integer>
    

    键 (String) 是单词,Integer 值存储计数

    【讨论】:

      【解决方案4】:

      你也可以对列表进行排序,然后计算一个单词重复了多少次

      在输出中增加了字母顺序的好处

      【讨论】:

        猜你喜欢
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-30
        • 2021-04-07
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多