#java #list #dictionary #arraylist #hashmap
#java #Список #словарь #arraylist #hashmap
Вопрос:
я использую hashmap для проверки того, что на карте существует значение ключа, и добавляю ключ в список, который я использую containsKey для предотвращения дублирования, но он добавляет дубликат в мой список
private static void makeList(int n,ArrayList<Integer> minimum ,HashMap<Integer,Integer> ugly) {
for(int i=1; minimum.size() < n; i) {
if(!ugly.containsKey(2*i)); {
minimum.add(2*i);
ugly.put(2*i,2*i );
}
int m3=3*i;
if(!ugly.containsKey(3*i)){
minimum.add(3*i);
ugly.put(3*i,3*i);
}
int m5=5*i;
if(!ugly.containsKey(m5)){
minimum.add(m5);
ugly.put(m5,m5);
}
}
}
Ответ №1:
Я вижу, что вы указали точку с запятой ;
после if()
условия
просто удалите это и попробуйте
private static void makeList(int n,ArrayList<Integer> minimum ,HashMap<Integer,Integer> ugly) {
for(int i=1; minimum.size() < n; i) {
if(!ugly.containsKey(2*i)) { //<-edited part, removed semicolon
minimum.add(2*i);
ugly.put(2*i,2*i );
}
int m3=3*i;
if(!ugly.containsKey(3*i)){
minimum.add(3*i);
ugly.put(3*i,3*i);
}
int m5=5*i;
if(!ugly.containsKey(m5)){
minimum.add(m5);
ugly.put(m5,m5);
}
}
Ответ №2:
Будьте просты, и это очистит код.
private static void makeList(int n, List<Integer> minimum, Map<Integer,Integer> ugly) {
for (int i = 1; minimum.size() < n; i )
for (int j : Arrays.asList(2, 3, 5))
if(ugly.put(i * j, i * j) == null)
minimum.add(i * j);
}
PS Почему бы вам не использовать Set<Integer>
вместо Map<Integer, Integer>
with key == value
?