Cuente las ocurrencias de palabras en ArrayList

Tengo una ArrayList de palabras con entradas duplicadas.

Quiero contar y guardar las apariciones de cada palabra en una estructura de datos.

¿Cómo puedo hacerlo?

Si no tiene una gran lista de cadenas, la forma más rápida de implementar es usar el método 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)); } 

Salida:

 aaa: 2 bbb: 1 

Hay muchas posibilidades. Una solución rápida de implementar podría ser usar un Map donde el String es cada palabra individual y un Entero el recuento de cada uno.

Recorre la lista e incrementa el valor correspondiente en el mapa para ella. En caso de que todavía no haya una entrada, agregue una con el valor 1.

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

Aquí hay una clase guiada por exámenes que hará lo que quieras. Primero la prueba:

 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")); } } 

Ahora la clase:

 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); } } 

Para resolver su problema específico, debería crear un contador e iterar sobre su lista, contando cada elemento.

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

O si eres demasiado flojo para hacerlo tú mismo (o un buen progtwigdor industrial: p), utiliza Multiset desde google guava.