Как вы можете видеть, animalsArrayList состоит из 3 bat элементов и одного owl элемента. Мне было интересно, есть ли какой-либо API в Collection Framework, который возвращает количество вхождений bat или есть другой способ определить количество вхождений.
Я обнаружил, что в коллекции Google Multiset есть API, который возвращает общее количество вхождений элемента. Но это совместимо только с JDK 1.5. Наш продукт в настоящее время находится в JDK 1.6, поэтому я не могу его использовать.
Переведено автоматически
Ответ 1
Я почти уверен, что статический частотный метод в коллекциях здесь пригодился бы:
Если вы кодируете реализацию и используете ArrayList, скажем, в 50 местах своего кода, когда вы найдете хорошую реализацию "Списка", которая подсчитывает элементы, вам придется изменить все эти 50 мест, и, вероятно, вам придется сломать свой код (если он используется только вами, это не имеет большого значения, но если он используется кем-то другим, вы также сломаете их код)
Программируя для интерфейса, вы можете оставить эти 50 мест неизменными и заменить реализацию из ArrayList на "CountItemsList" (например) или какой-либо другой класс.
Ниже приведен очень простой пример того, как это можно написать. Это всего лишь пример, готовый к работе список был бы намного сложнее.
// This is private. It is not visible from outside. private Map<E,Integer> count = newHashMap<E,Integer>();
// There are several entry points to this class // this is just to show one of them. publicbooleanadd( E element ) { if( !count.containsKey( element ) ){ count.put( element, 1 ); } else { count.put( element, count.get( element ) + 1 ); } returnsuper.add( element ); }
// This method belongs to CountItemList interface ( or class ) // to used you have to cast. publicintgetCount( E element ) { if( ! count.containsKey( element ) ) { return0; } return count.get( element ); }