Вот рабочий пример:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String[] names = {"a","b","a","a","c","b"};
Integer[] numbers = {5,2,3,1,2,1};
Map<String, Integer> occurrences = new HashMap<>();
for(int i = 0; i < names.length; ++i) {
String key = names[i];
Integer previousNumber = occurrences.getOrDefault(key, 0); //Previously stored number
Integer correspondingNumber = numbers[i]; //Delta for specified name
occurrences.put(key, previousNumber + correspondingNumber); //Storing new value
}
//Print result
occurrences.forEach((key, value) -> System.out.println("Name: " + key + " Amount: " + value));
}
}
Карты позволяют вам присвоить какое-то значение некоторому уникальному ключу.Говорят, что обычно операции размещения / поиска в Картах имеют временную сложность O (1), что делает их идеальным решением вашей проблемы.Самая базовая реализация - это HashMap, но если вы хотите сохранить порядок имен при итерации, просто используйте LinkedHashMap.С другой стороны, если вы хотите, чтобы ваши данные сортировались каким-либо образом, вы, вероятно, будете использовать TreeMap.
РЕДАКТИРОВАТЬ: Как Шарон Бен Ашер упоминал в разделе комментариев ниже, вы можете использовать метод merge ()чтобы сократить код:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String[] names = {"a","b","a","a","c","b"};
Integer[] numbers = {5,2,3,1,2,1};
Map<String, Integer> occurrences = new HashMap<>();
for(int i = 0; i < names.length; ++i)
occurrences.merge(names[i], numbers[i], Integer::sum);
//Print result
occurrences.forEach((key, value) -> System.out.println("Name: " + key + " Amount: " + value));
}
}
Но я немного разбил его в первом ответе, просто чтобы дать вам лучшее объяснение того, как работают карты.В основном вы используете такие методы, как get () (getOrDefault () является его вариантом, который возвращает значение, даже если сопоставление не найдено для данного ключа) и put () позволяют вам зафиксировать новое сопоставление / переопределение, существующее для данного ключа.