Получить количество дубликатов из ArrayList - PullRequest
0 голосов
/ 06 марта 2012

Например, скажем, у меня есть ArrayList, который может содержать следующие значения:

x
x
x
y
y

Теперь то, что я хочу получить, это число x и x, и я хочубыть в состоянии различить то, что у меня есть, либо x, либо y, потому что на самом деле у меня может быть любой объект в ArrayList, и я должен иметь возможность различать их.

То, что я думал о том, чтобы сначала преобразовать ArrayList в LinkedHashSet, который сохранял бы порядок и удалял дубликаты, так что у меня были бы x и y Нокак бы я получить номер каждого и связать его с соответствующим элементом?

В целом, я хочу написать toString метод, который позволит мне вывести:

x3y2

Но не зная, что x и y - это элементы, потому что они могли быть чем-то еще, например z или w.

Ответы [ 3 ]

5 голосов
/ 06 марта 2012

Проверьте Multiset в Google Guava: http://docs.guava -libraries.googlecode.com / git-history / v11.0.2 / javadoc / com / google / common / collect / Multiset.html

Пример:

Multiset<String> strings = HashMultiset.create(arrayList);
int countX = strings.count("x"); // the count of x

Больше примеров можно найти в Guava wiki .

2 голосов
/ 06 марта 2012

То, что вы хотите сделать, это использовать HashMap<Object, Long>. Сохраните Объект как ключ, а Длину - как число вхождений.

Вот некоторый псевдокод, который будет делать то, что вы пытаетесь сделать.

for(x in list) {
 if(x in Map) {
   map.put(x, map.get(x)++);
 } else {
   map.put(x, 1);
 }
}

Затем вы можете выполнить итерацию по карте и распечатать значение и количество вхождений. Я позволю тебе написать это. Это достаточно просто.

0 голосов
/ 06 марта 2012

Что ж, для этого вы можете пройти list с конца.Держите счетчик и продолжайте проверять изменения в объекте.Как только вы обнаружите изменение, замените число в счетчике на current position + 1.Делайте это, пока не достигнете первой позиции.

...