Java ArrayList. remove () без уменьшения размера ArrayList

У меня есть список ArrayList для хранения некоторых данных, но всякий раз, когда я удаляю элемент из списка, размер не уменьшается, даже когда я вызываю ArrayList.trimToSize (). Это вызывает у меня nullPointerExceptions.

Как я могу удалить отдельный элемент из ArrayList и соответственно уменьшить размер списка ()?

EDIT: Хорошо, вот код. Вот немного предыстории, которую вам нужно знать, так как я не могу опубликовать весь код. У меня есть список ArrayList с именем _dataHeap и HashMap с именем _dataMap. ArrayList - это двоичная куча, содержащая "найденный" объект, который имеет ключ. Связывание HashMap из Key с индексом объекта в ArrayList. Это сделано для того, чтобы элемент в очереди можно было найти по элементу с помощью HashMap или по индексу с помощью ArrayList. Ключ может быть любым объектом, если он уникален для каждого элемента в очереди.

Я отлаживал эту строку за строкой, и куча содержит объект, вплоть до хэш-кода. Проблема в том, что объект никогда не удаляется из ArrayList. Это должно означать, что _dataMap.get (element.getKey ()) не указывает туда, где он должен. Тем не менее, я проверил это, я использовал тестовый объект вне моей реализации, который преобразует String в пользовательский объект со String в качестве ключа.

Я создаю один объект со String «one» в качестве ключа. Вставляю, потом пытаюсь удалить. Я прошел через это, и все прошло проверку, кроме одного: Объект никогда не удаляется из очереди. У него тот же хэш-код, тот же ключ, все. Он отлично удаляется с карты, но не из ArrayList.

Вот метод удаления:

public T remove(T element) {
    //We'll need this data to return the proper value
    T t = _dataHeap.get(_dataMap.get(element.getKey()));
    /*
     * this Swap() call is used to swap our target with the end
     * of the arraylist. This means that whenever we remove it,
     * we don't have a change in indexes of the other nodes.
     * After that, we downHeapify() to fix the whole graph back
     * to it's functional state.
     */
    swap(_dataMap.get(element.getKey()),length()-1);
    //Remove from the Heap
    _dataHeap.remove(_dataMap.get(element.getKey()));
    _dataHeap.trimToSize();
    //Remove from the Map
    _dataMap.remove(element.getKey());
    downHeapify();
    return t;

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

ИЗМЕНИТЬ ВТОРОЙ: Святой хрень я наконец починил! Я поместил _dataHeap.get (element.index) в его собственную переменную. Это решило ВСЕ!

5
задан digiholic 20 October 2010 в 03:55
поделиться