Как подтверждать, что map содержит ключ? [закрывшая]

Я создал map, ключ которого - класс Предмет и стоимость один ArrayList класса Ученик.

Map<Asignatura, List<Alumno>> mapa = new HashMap<>();

У меня есть переменная в класса Предмет.

Я хочу подтвердить, содержит ли map этот ключ, но не получаю, что между в if.

if(mapa.containsKey(a))
{
    System.out.println("Contiene la clave");
}

Как он мог бы решать это? Спасибо заранее.

2
задан 15.12.2016, 11:34
4 ответа

Использовать Map#containsKey(llave) это правильный способ проверять, существует ли ключ в карте. Если он не возвращает тебе ожидаемый результат (true) тогда причина состоит в том, чтобы ключ не был идентифицирован как единственная. Чтобы определять этот unicidad, мы имеем общее осуществление Map использованная:

  1. Осуществления HashMap, LinkedHashMap и ConcurrentHashMap они используют методы hashCode и equals чтобы идентифицировать unicidad ключа. Ты должен обеспечивать себе, что эти методы были осуществлены apropiadamente в классе, который ты используешь как ключ.

  2. Осуществления TreeMap и ConcurrentSkipMap они используют натуральный порядок ключей, чтобы идентифицировать их. Для этого, класс ключа должен осуществлять интерфейс Comparable или нужно поставлять один Comparator<K> (где K это тип ключа), что позволил идентифицировать, если ключ превосходящий, меньший или равен другой.

Как ты показываешь, что ты используешь один HashMap, тогда годится проверять осуществление методов hashCode и equals в твоем классе Asignatura и видеть, что они возвратили приспособленную стоимость идентифицировать равенство объекта, который ты посылаешь. Если ты поставляешь определение этого класса, возможно очищать ответ.

2
ответ дан 24.11.2019, 12:04
  • 1
    Он мне кажется increí ble, чем с reputació n, что у тебя есть aú n ответь вопросы, что debí an, закрылось раньше из-за того, что не быть ясным то, что он спрашивает. –  Awes0meM4n 15.12.2016, 17:34
  • 2
    @Awes0meM4n для mí ясно, что он осведомляется. Если для тебя он это не, ты можешь голосовать в завершение. –   15.12.2016, 17:34
  • 3
    Я это сделал некоторое время назад, пальто, когда я увидел столько ответов в проблему, у которой может быть несколько причин. Одни прямо с плохой prá ctica и другие посмотрим звучит флейта. Поэтому tambié n voté во все в негативе. Эти вопросы и ты возвращена те, которые идут в mediocrizar это сообщество. –  Awes0meM4n 15.12.2016, 17:37

Я думаю, что проблема может быть, в котором не было sobreescrito методов hashCode и equals в Предмете, который, если я не помню плохо, те, которых используют Hash. Если ты это не сделал, я думаю, что он только войдет, когда "a" будет той же ссылкой, которую ты ввел в Hash

1
ответ дан 24.11.2019, 12:04
  • 1
    Если не está просвет cuá l - проблема, которая есть у человека, лучше помещать комментарий в неполный ответ, или что преуспел по чистой случайности. Когда OP мы informació n, который нужен, когда habrá что решать идентифицированную проблему. Я говорю это тебе как и я говорю это ему в оставшуюся часть ответов в этом вопросе. Неполный ответ или с изобретением хуже, что не иметь ее, так как он может запутывать любого. Ademá s не нужно sobrescribir mé все, кого ты говоришь для HashMap, podrí чтобы давать хуже оказанные mé совсем по умолчанию, но funcionará. –  Awes0meM4n 15.12.2016, 16:46
  • 2
    @Awes0meM4n está s спутанный. Для одного HashMap, mé все hashCode и equals - ключ, чтобы определять, если ключ - ú nica в карте. –   15.12.2016, 17:12
  • 3
    @LuiggiMendoza я гарантирую тебя, что он не надо для того, чтобы оно функционировало. Смотри хорошо тему и ты dará s счет этого. Очевидно, если ты считаешь хорошо осуществленными эти два mé все весь será лучше, но в общем, он не надо для того, чтобы оно ты функционировало приемлемо. Я сытый тем, что делаю HashMap s в списках с десятками тысяч элементов и никогда у меня не не была ни неудача, ни excepció n разбивания контракта. Он не состоит как в TreeMap в том, что, если он не осуществляет Comparable, он даже не будет составлять. У OP нет этой проблемы, я уверен в этом. Ло má s вероятным является то, что я поместил в комментарий вопроса –  Awes0meM4n 15.12.2016, 17:29
  • 4
    @Awes0meM4n я увидел эту же самую situació n в нескольких вопросах SOen, это очень вероятно, что patró n повторитесь aquí. –   15.12.2016, 17:30
  • 5
    @LuiggiMendoza, если он así не sé потому что ты не проголосовал, чтобы закрывать этот вопрос из-за удвоенная. Он мне кажется increí ble, чем с reputació n, что у тебя есть aú n ответь вопросы, что debí an, закрылось раньше из-за того, что не быть ясным то, что он спрашивает. –  Awes0meM4n 15.12.2016, 17:31

Для того, чтобы он нашел стоимость в таблице, раньше ты должен помещать ключи со стоимостью.

mapa.put(a, lista);
if (mapa.contains(a))
    System.out.println("Contiene la clave");
-1
ответ дан 24.11.2019, 12:04
  • 1
    Я не вижу definició n Map#contains в definició n Map. Того, что есть, так это containsKey. có я говорю, что поставленный он не составляет. –   06.01.2017, 22:34
Map<Asignatura, List<Alumno>> mapa = new HashMap<>();
//aquí deberías tener un bucle que se le pasa "p" al map.get()
if(mapa.contains(a)){
       map.get(p).addAll(p.getAlumno()); //es una lsita , es un tipo mutable por     tanto no es necesario que hagas el put
}else{
 //en caso de que no esté , se asocia clave-valor nuevas.
 List<Alumno>alum= new ArrayList<Alumno>();
        alum.addAll(p.getAlumnos());
        map.put(p, alum);
}

Я это сделал более или менее, как он типичный, но очевидно ты не выражаешь очень хорошо, с которым ты хочешь, я оставляю здесь что-то тебе, если он служит тебе помощью.

-2
ответ дан 24.11.2019, 12:04
  • 1
    Я не вижу definició n Map#contains в definició n Map. Того, что есть, так это containsKey. có я говорю, что поставленный он не составляет. –   06.01.2017, 22:33