Считать количество слов в ArrayList

У меня есть ArrayList слов с повторяющимися записями.

Я хочу подсчитывать и сохранять вхождения для каждого слова в структуре данных.

Как мне это сделать?

Если у вас нет большого списка строк, самым коротким способом реализации является метод Collections.frequency:

 List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("aaa"); Set unique = new HashSet(list); for (String key : unique) { System.out.println(key + ": " + Collections.frequency(list, key)); } 

Вывод:

 aaa: 2 bbb: 1 

Есть много возможностей. Быстрое выполнение решения может заключаться в использовании Map где String – это каждое отдельное слово, а Integer – подсчет каждого из них.

Пройдите по списку и увеличьте соответствующее значение на карте. Если запись еще не указана, добавьте ее со значением 1.

 wordList = ....; Map wordCount = new HashMap(); for(String word: wordList) { Integer count = wordCount.get(word); wordCount.put(word, (count==null) ? 1 : count+1); } 

Вот тестовый class, который будет делать то, что вы хотите. Сначала тест:

 import junit.framework.TestCase; public class CounterTest extends TestCase { private Counter counter; @Override protected void setUp() throws Exception { super.setUp(); counter = new Counter(); } public void testInitialCountIsZero() throws Exception { assertEquals(0, counter.get("a")); } public void testCount() throws Exception { counter.count("a"); assertEquals(1, counter.get("a")); } } 

Теперь class:

 import java.util.HashMap; public class Counter { private final HashMap map = new HashMap(); public int get(T key) { final Integer n = map.get(key); return n == null ? 0 : n; } public void count(T key) { map.put(key, get(key) + 1); } } 

Чтобы решить вашу конкретную проблему, вы должны создать счетчик и перебрать свой список, подсчитывая каждый элемент.

 Counter counter = new Counter(); for (String string: myList) counter.count(string); 

Или, если вы слишком ленитесь, чтобы сделать это самостоятельно (или хороший промышленный программист: p), используйте Multiset из google guava.

  • Как отправить cookies с помощью selenium webdriver?
  • Как совместить прослушиватели событий с запросом на событие?
  • Отображать номера от 1 до 100 без петель или условий
  • JPA и Hibernate - критерии против JPQL или HQL
  • Когда вы используете аннотацию @Override Java и почему?
  • Как сохранить профили запуска Eclipse в рабочих пространствах?
  • Есть ли параллельный список в JDK Java?
  • Как определить несколько действий JButton из другого classа
  • Java 8: Разница между ссылкой метода Bound Receiver и UnBound Receiver
  • Значение двойного значения в формате Java в виде суммы в долларах
  • Java - экранирование метасимволов в Regex
  • Interesting Posts

    Как преобразовать имена переименований в строку в c

    Как я могу предотвратить программирование устройства Android?

    Линейный цикл регрессии для каждой независимой переменной отдельно от зависимой

    Элемент jquery fade не отображает элементы в стиле «видимость: скрытый»

    Ubuntu 9.10 + Windows 7 с двойной загрузкой, динамические диски

    Что означает значение thread_local в C ++ 11?

    Может ли VPN увидеть использование веб-браузера?

    Notepad ++. Как заменить разные символы соответствующими буквами одновременно?

    Моделирование шаблонов в C (для типа данных очереди)

    Facebook Like-Button – скрыть счет?

    Как использовать акселерометр Android?

    Не удается удалить папку в качестве администратора, запрашивает у администратора пользователя, которого не существует, – «вам нужно предоставить разрешение администратора для удаления этой папки»

    Добавить новый элемент в существующий массив в c # .net

    google map не отображается после публикации приложения для Android?

    «Метод сравнения нарушает общий контракт!» – TimSort и GridLayout

    Давайте будем гением компьютера.