我有一个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)