实际上无法访问数组的末尾

问题描述 投票:0回答:1

我有一个ArrayList定义如下:

  private List<WeakReference<BleLockConnectionListener>> connectionListeners = new ArrayList<>();    

对该ArrayList的所有访问均已同步。下面的代码不时崩溃,说我在大小为1时试图访问索引1:

  synchronized (connectionListeners)
  {
    for (int i = connectionListeners.size() - 1; i >= 0; --i)
    {
      WeakReference<BleLockConnectionListener> reference = connectionListeners.get(i);
      BleLockConnectionListener connectionListener = reference.get();
      if (connectionListener == null)
      {
        connectionListeners.remove(i);
      }
      else
      {
        connectionListener.connected(deviceId);
      }
    }
  }

导致异常的行是;

WeakReference<BleLockConnectionListener> reference = connectionListeners.get(i);

但是我不明白它如何发生。如果在进入循环时大小为1,则应以i == 0开头。如果大小为2或更大,并且项被删除,则在删除之后,我应该递减,因为每次循环执行仅删除一项,我仍然应该小于尺寸。

任何人都可以提供解释吗?

java arraylist indexoutofboundsexception
1个回答
0
投票

我不知道size()对您的ArrayList有什么作用。

Count是一个有效的属性,用于检索ArrayList中的元素数:

for (int i = connectionListeners.Count - 1; i >= 0; --i)
© www.soinside.com 2019 - 2024. All rights reserved.