この記事では、Java コレクション要素の ArrayList インスタンスの詳細な説明に関する関連情報を主に紹介します。必要な方は参照してください。
Java コレクション要素の ArrayList インスタンスの詳細な説明があります。このメソッドは、AbstractCollection コレクション クラスの削除メソッドです。このメソッドは、さまざまなコレクションを備えており、空の要素を削除できるのに適しています。コードのこの部分を見て、なぜ直接削除するのかという疑問が生じました。ここで it.remove() を使用しますか?
public boolean remove(Object o) { Iterator<E> it = iterator(); if (o==null) { while (it.hasNext()) { if (it.next()==null) { it.remove(); return true; } } } else { while (it.hasNext()) { if (o.equals(it.next())) { it.remove(); return true; } } } return false; }
継承
構造を下の図に示します。さらに、ArrayList の内部には Iterator の実装クラスがあります。テストコードを書きます:
AbstractCollection<String> list = new ArrayList<>(); list.add("a"); list.add(null); list.add(null); Iterator<String> iter = list.iterator(); while(iter.hasNext()) { if(iter.next() == null) { iter.remove(); } } System.out.println(list);
public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; }
index
を表します。 next メソッドが呼び出されると、カーソルは実際には現在の要素の次の要素を指し、lasrRet を使用して現在のインデックスのデータを取得して返します。remove() メソッドでは、lastRet のインデックスを通じて削除が行われます。
public void remove() { if (lastRet < 0) throw new IllegalStateException(); checkForComodification(); try { ArrayList.this.remove(lastRet); cursor = lastRet; lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } }
1. next() メソッドを呼び出し、カーソルが要素 0 を指し、i にカーソルの値が割り当てられ、次にカーソルが i+1 に変更され、null が存在する要素 1 を指し、lastRet が割り当てられます。は0です。
2. next() メソッドを呼び出します。カーソルは要素 1 を指し、それを i に割り当てます。次に、カーソルは i+1 から 2 まで増加し、lastRet には値 1 が割り当てられます。
【関連おすすめ】
Java無料ビデオチュートリアル
3. JAVAチュートリアルマニュアル
以上がJava AbstractCollectionのremoveメソッドの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。