Что находится внутри пустого индекса Hashmap? - PullRequest
0 голосов
/ 22 июля 2010

У меня есть хэш-карта размером 101 ключ, но я точно знаю, что около 6 из них не имеют данных внутри, а может быть и больше без данных.Что именно находится внутри пустых индексов?Это ноль?или есть метод Hash (index) .isEmpty (), который я могу использовать, чтобы увидеть, является ли он пустым?

Я понимаю, что внутри hashmap есть метод isEmpty, но я подумал, что проверяется только, если вся картапусто, а не только один индекс.

Ответы [ 3 ]

1 голос
/ 22 июля 2010

Я понимаю, что есть метод isEmpty внутри hashmap, но я думал, что проверяется только если вся карта была пусто, а не только один индекс.

Я думаю, что вы ищете containsKey(Object) метод . Согласно документации:

Возвращает true, если эта карта содержит сопоставление для указанного ключа. Больше формально, возвращает true тогда и только тогда, когда эта карта содержит карту для ключа k такой, что (key==null ? k==null : key.equals(k)). (Может быть не более одно такое отображение.)

Параметры:

key - ключ, присутствие которого на этой карте необходимо проверить

Возвращает:

true, если эта карта содержит отображение для указанного ключа

0 голосов
/ 22 июля 2010

Судя по тому, что вы сказали, я подозреваю что-то вроде этого:

Map<SomeKey, List<SomeValue>> yourMap;

Если это так, то вы можете сделать

if( yourMap.contains(someKey) ){
    List<SomeValue> someList = yourMap.get(someKey);
    if(someList.size() == 0){
        // it's empty, do something?
    }
}
0 голосов
/ 22 июля 2010

Ну, чтобы ключи пришли туда без данных, вам нужно put их там.

Если вы сделали map.put(key, null), тогда да, данные для этого ключа - null.Вы всегда должны давать второй параметр методу, вы не можете просто map.put(key).

Если вы точно знаете, что определенный ключ не содержит данных, вы можете попробовать перейти в режим отладки и поставитьпосмотрите на myMap.get(myEmptyKey) и посмотрите, что вы получите (в случае, если никакие данные не являются пустым объектом или чем-то еще, вы должны это увидеть).

Редактировать: Некоторый код будет полезен, чтобы помочь вам,но если я правильно понимаю, вы делаете что-то вроде этого:

for (Object obj : list) {
    if (matchesCriteriaX(obj)) {
         map.put("X", obj);
    else if (matchesCriteriaY(obj)) {
         map.put("Y", obj);
    }
}

Хорошо, если вы делаете это и пытаетесь сделать map.get("X"), но вы на самом деле никогда ничего не ставите для этого ключа (потому что объект не соответствует критериям X), вы определенно получите обратно null.

С другой стороны, если вы сделали что-то вроде

Map<String, List<Object>> map = new HashMap<String, List<Object>>();
map.add("X", new ArrayList<Object>());
map.add("Y", new ArrayList<Object>());
for (Object obj : list) {
    if (matchesCriteriaX(obj)) {
         List<Object> list = map.get("X");
         list.add(obj);
    else if (matchesCriteriaY(obj)) {
         List<Object> list = map.get("Y");
         list.add(obj);
    }
}

, то вы можете проверить, является ли категория пустой, выполнив map.get("x").isEmpty(), поскольку у List есть этот метод (и он был бы пустым, если бы ни один объект не соответствовал ключевым критериям).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...