小编dig*_*lic的帖子

Java ArrayList.remove()不会减小ArrayList的大小

我有一个ArrayList来存储一些数据,但每当我从列表中删除一个项目时,即使我调用ArrayList.trimToSize(),大小也不会减少.这导致我nullPointerExceptions.

如何从ArrayList中删除单个项目并使列表的size()相应缩小?

编辑:好的,这是代码.这里有一些你需要知道的背景知识,因为我无法发布所有代码.我有一个名为_dataHeap的ArrayList和一个名为_dataMap的HashMap.ArrayList是一个二进制Heap,包含一个"findable"对象,它有一个Key.HashMap从Key绑定到ArrayList中对象的索引.这样就可以通过使用HashMap的项目或使用ArrayList的索引找到队列中的项目.Key可以是任何Object,只要它对队列中的每个项都是唯一的.

我逐行调试了这个,而Heap包含了对象,甚至包含Hashcode.问题是,Object永远不会从ArrayList中删除.这必须意味着_dataMap.get(element.getKey())没有指向它应该的位置.我已经检查了它,我在我的实现之外使用了一个测试对象,它从String映射到一个自定义对象,String作为键.

我创建了一个对象,字符串"one"作为其键.我插入它,然后尝试删除它.我已经逐步完成了这一切,所有内容都会检出,除了一件事:对象永远不会从队列中删除.它有相同的Hashcode,相同的Key,一切.它很好地从地图中删除,但不是从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 …
Run Code Online (Sandbox Code Playgroud)

java arrays size arraylist

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

arraylist ×1

arrays ×1

java ×1

size ×1