Для данной большой строки, содержащей случайные числа и для этих отдельных чисел, как я могу найти количество каждого числа?
Мой подход:
Есть ли другой более быстрый и эффективный способ сделать это, потому что я использую функцию notepad/notepad++ find, которая работает довольно быстро по сравнению с моим методом.
Код:
List<Integer> list=new ArrayList<Integer>();
List<Integer> subList=new ArrayList<Integer>();
for(int i=0;i<list.size();i++){
int count=1;
int number=list.get(i);
if(!subList.contains(number)){
for(int j=i+1;j<list.size();j++){
if(list.get(j)==number){
count++;
}
}
System.out.println(number+" "+count);
subList.add(number);
}
}
Теперь, когда у нас есть демонстрация того, что у вас есть, мы можем лучше проанализировать ситуацию.
Похоже, вы не знаете, как связать счет с каждым отдельным элементом. Вы увеличиваете счет, но не связаны ни с одним из элементов, и, вероятно, самым большим фактором путаницы.
Здесь хорошо работает HashMap.
В этом случае вы хотите связать номер, который вы нашли, i, со своим собственным счетом, c. Счет начнется с 1, для первого, который мы нашли, и затем увеличиваем, как мы находим больше. С идеей HashMap мы можем взять любое целое число, о котором вы можете думать, и использовать его как ключ, а затем сопоставить его счет c как значение, которое вы извлекаете из ключа.
HashMap<Integer, Integer> findMap = new HashMap<Integer, Integer>();
for (int i = 0; i < list.size(); i++) {
int number = list.get(i);
if (findMap.get(number) == null) {
// we didn't find it in the map, so we put it in with a counter of 1
findMap.put(number, 1);
}
else {
// we already have inserted it, we should add 1 to counter
findMap.put(number, findMap.get(number) + 1);
}
}
//to get everything out of the HashMap
for (Integer i : findMap.keySet()) {
System.out.println(i + ": " + findMap.get(i));
}
В качестве задачи для ОП, если у вас достаточно опыта, определите Big O части вставки кода.