Java count вхождение каждого элемента в массиве
есть ли какой-либо метод для подсчета вхождения каждого элемента в массив?
допустим, у меня есть:
и если у меня есть:
вывод здесь только для того, чтобы продемонстрировать ожидаемый результат.
16 ответов
вы могли бы использовать MultiSet из коллекций Google / Guava или a Bag из Apache Commons.
если у вас есть коллекция вместо массива, вы можете использовать addAll() чтобы добавить все содержимое в вышеуказанную структуру данных, а затем применить count() метод для каждого значения. А SortedMultiSet или SortedBag даст вам элементы в определенном порядке.
С java-8, вы можете сделать это так:
если вы хотите получить Map который содержит количество случаев для каждого слова, оно может быть сделано:
надеюсь, что это помогает! 🙂
Я бы использовал хэш-таблицу с in key принимает элемент массива (здесь строка) и в value целое число.
затем пройдите через список, делая что-то вроде этого :
Я написал решение этой практики самостоятельно. Это не кажется почти таким же удивительным, как другие ответы, но я все равно опубликую его, а затем научусь делать это с помощью других методов. Наслаждайтесь:
С помощью HashMap это прогулка в парке.
вы можете сделать это с помощью массивов.сортировка и рекурсия. То же вино, но в другой бутылке.
Это можно сделать очень простым способом, используя коллекции пожалуйста, найдите код ниже
вот на выходе имя1 2 имя1 2 ФИО2 3 ФИО2 3 ФИО2 3
чтобы избежать печати избыточных ключей, используйте HashMap и получите желаемый результат
вы можете использовать хэш-карту, как в примере ниже:
есть несколько методов, которые могут помочь, но это один является использование цикла for.
Это простой скрипт, который я использовал в Python, но его можно легко адаптировать. Ничего особенного.
вы можете найти с помощью HashMap с простой technic
/ / ответ без использования Hashset или map или Arraylist
вы можете использовать HashMap, где Key-ваша строка и значение-count.
ez code
Массивы в Java
В этом уроке мы научимся работать с массивами в Java.
Массив — это структура данных, для хранения некоторого количества элементов одного и того же типа. Размер массива задается при его инициализации и не может быть изменен. Нумерация элементов начинается с нуля.
Синтаксис
Проще говоря массив — это структура, для замены этого:
Преимущество этой конструкции заключается в том, что число в квадратных скобках можно заменить переменной, что удобно использовать в циклах.
Для того, чтобы использовать массив нам необходимо объявить и инициализировать его. Объявление:
Инициализация, с помощью оператора new выделим для массива необходимую память:
Мы также можем объявить массив с заранее заданными значениями элементов:
Напишем первую программу с использованием массива. Объявим, инициализируем и выведем значения на экран:
Массивы передаются по ссылке
Массивы передаются другим функциям по ссылке или как указатель на оригинал. То есть, если переданный массив изменится в функции, изменится и оригинал. Запустив следующую программу вы можете в этом убедиться.
Многомерные массивы
Для объявления многомерных массивов в Java используется следующая форма:
Обратите внимание, что размерность каждого элемента может быть разной.
Массивы объектов
Обратите внимание, что в первой строчке метода main мы выделили память для 4 объектов типа Т, но каждый из них тоже надо инициализировать, иначе будет возбуждено исключение NullPointer.
Count в java что это
В уроке 8 мы затронули логические операторы, они нам были необходимы для формирования логического выражения в условиях if. Этот урок будет посвящен математике в Java, и поэтому мы рассмотрим подробнее арифметические операторы и частично возможности класса Math.
Но для начала, выясним, что же такое операторы. Операторы это специальные символы, отвечающие за ту или иную операцию, например сложение, умножение, сравнение. Все операторы в Java можно разбить на 4 класса — арифметические, битовые, операторы сравнения и логические.
Арифметические операторы в Java
Для стандартных арифметических операций, таких как сложение, вычитание, умножение, деление в Java используются традиционные символы, к которым мы привыкли со школы:
В Java также имеется специальный оператор %, обозначающий остаток от делния.
Пример использования: дан массив целых чисел, вывести на консоль только те числа, которые делятся на 3.
Операции с присваиванием
Рассмотрим задачу вывода на экран 10 первых четных чисел чисел
мы можем записать сокращенно
+= это оператор сложения с присваиванием. Подобные операторы есть для всех основных 5 операций, рассмотренных выше
Пример использования: Найти факториал числа 7.
Инкрементирование и декрементирование
Инкремент, обозначается ++ и увеличивает значение переменной на единицу. Декремент обозначается — и уменьшает значение на единицу. С инкрементом и декрементом мы часто встречаемся в цикле for.
Инкремент и декремент бывают двух форм
Различие префиксной и постфиксной формы проявляется только тогда, когда эти операции присутствуют в выражениях. Если форма префиксная, то сначала произойдет увеличение (или уменьшение) переменной на единицу, а потом с новым значением будет произведены дальнейшие вычисления. Если форма постфиксная, то расчет выражения будет происходить со старым значением переменной, а переменная увеличится (или уменьшится) на единицу после вычисления выражения. Пример
В первом случае сначала переменная a увеличится на 1, потом произойдет вычисление всего выражения. Во втором случае произойдет вычисление выражения при старом значении b = 3, и после вычисления b увеличится на 1, на результат в postfix это уже не повлияет.
Если вы поняли принцип работы постфиксного и префиксного инкремента/декремента, то предлагаю решить в уме такую задачу:
Вопрос: чему в итоге равны x и y? После того, как вы сделали предположение, проверьте его в java.
Задача со зведочкой. Дан код:
Какие числа будут выведены на экран? Почему? Разобраться самостоятельно.
Примечание: инкремент и декремент применяются только к переменной. Выражение вида 7++ считается недопустимым.
Математические функции и константы (класс Math)
Поток Java: Часть 2, Счетчик Всегда Счетчик?
Java 8
В моей предыдущей статье мы могли бы заключить, что операция
list.stream().count() — это O(N) в Java 8, т.е. время выполнения зависит от количества элементов в исходном списке. Прочитать статью
здесь
Java 9 и выше
Как справедливо отметили Николай Парлог (@nipafx) и Брайан Гетц (@BrianGoetz) в Twitter, реализация Stream::count была улучшена, начиная с Java 9. Вот сравнение основных
Код Stream::count между Java 8 и более поздними версиями Java:
Java 8 (из класса ReferencePipeline)
Java 9 и более поздние версии (из класса ReduceOps)
Ориентиры
Свойство big-O можно наблюдать, выполнив следующие тесты JMH для Java 8 и Java 11:
Это даст следующие результаты на моем ноутбуке (MacBook Pro, середина 2015 года, 2,2 ГГц Intel Core i7):
JDK 8 (из моей предыдущей статьи)
JDK 11
Брайан Гетц отметил, что некоторые разработчики, которые использовали вызовы метода Stream::peek в Java 8, обнаружили, что эти методы больше не вызывались, если операция терминала Stream::count выполнялась в Java 9 и более поздних версиях. Это вызвало негативную обратную связь с разработчиками JDK. Лично я думаю, что это было правильное решение разработчиков JDK, и это вместо этого предоставило отличную возможность для
Stream::peek получают правильный код.
Более сложные потоковые трубопроводы
В этой главе мы рассмотрим более сложные потоковые конвейеры.
JDK 11
Это можно наблюдать, выполнив следующий тест:
Таким образом, list.stream().skip(1).count() по-прежнему равен O (N).
Speedment
Некоторые реализации потоков на самом деле знают свои источники и могут использовать соответствующие ярлыки и объединять потоковые операции с самим источником потоков. Это может значительно повысить производительность, особенно для больших потоков с более сложными потоковыми конвейерами, такими как stream().skip(1).count()
При запуске будет получен следующий вывод:
Резюме
Stream::count был значительно улучшен в Java 9.
Ресурсы
Мнения, высказанные участниками Java Code Geeks, являются их собственными.
Подсчет вхождений символа в строке
Узнайте, как подсчитывать символы с помощью основной библиотеки Java, а также с помощью библиотек и фреймворков, таких как Spring и Guava.
1. Обзор
Есть много способов подсчитать количество вхождений стула в String в Java.
В этом кратком руководстве мы сосредоточимся на нескольких примерах подсчета символов — сначала с основной библиотекой Java, а затем с другими библиотеками и фреймворками, такими как Spring и Guava.
Дальнейшее чтение:
Использование indexOf для поиска всех вхождений слова в строке
Чародейка из гуавы
Обработка строк с помощью Apache Commons Lang 3
2. Использование Core Java Lib
2.1. Императивный подход
Некоторые разработчики могут предпочесть использовать ядро Java. Существует множество способов подсчета количества вхождений символа в строку.
Давайте начнем с простого/наивного подхода:
Неудивительно, что это сработает, но есть и лучшие способы сделать это.
2.2. Использование рекурсии
Менее очевидным, но все же интересным решением является использование рекурсии:
2.3. Использование Регулярных Выражений
Другим способом было бы использование регулярных выражений:
Просто обратите внимание, что это решение технически правильно, но неоптимально, так как использование очень мощных регулярных выражений для решения такой простой задачи, как нахождение количества вхождений символа в строке, является излишним.
2.4. Использование функций Java 8
Новые функции, доступные в Java 8, могут быть очень полезны здесь.
Давайте использовать потоки и лямбды для реализации подсчета:
Таким образом, это явно более чистое и читаемое решение, использующее основную библиотеку.
3. Использование Внешних Библиотек
Давайте теперь рассмотрим несколько решений, которые используют утилиты из внешних библиотек.
3.1. Использование стрингутилов
Во-первых, нам нужно включить соответствующую зависимость:
Теперь давайте использовать count Matches() для подсчета количества символов e в строковом литерале “слон”.:
3.2. Использование гуавы
Гуава также может быть полезна при подсчете символов. Нам нужно определить зависимость:
Давайте посмотрим, как Гуава может быстро помочь нам подсчитать чарс:
3.3. Использование пружины
Естественно, добавление фреймворка Spring в наш проект только для подсчета символов не имеет смысла.
Однако, если он уже есть в нашем проекте, нам просто нужно использовать метод count вхождений() :
4. Заключение
В этой статье мы сосредоточились на различных способах подсчета символов в строке. Некоторые из них были разработаны исключительно на Java; некоторые требовали дополнительных библиотек.



