2012-03-05 2 views
0

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

x 
x 
x 
y 
y 

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

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

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

x3y2 

Но, не зная, что x и y являются элементы, так как они могли бы что-то другое например z или w.

+0

Являются ли каждый экземпляр объекта равным друг другу? Итак, x == x и y == y? или просто типы, равные Integer == Integer и String == String, но они могут иметь разные значения? – Wizetux

+0

Разрешено ли изменять «ArrayList»? – hmjd

+0

@Wizetux Экземпляры равны друг другу. –

ответ

2

Что вы хотите сделать, это использовать HashMap<Object, Long>. Храните объект в качестве ключа и длинный, как подсчет вхождения.

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

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

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

0

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