Java AbstractCollectionのremoveメソッドの詳細説明

Y2J
リリース: 2017-05-09 13:50:13
オリジナル
2004 人が閲覧しました

この記事では、Java コレクション要素の ArrayList インスタンスの詳細な説明に関する関連情報を主に紹介します。必要な方は参照してください。

Java コレクション要素の ArrayList インスタンスの詳細な説明があります。このメソッドは、AbstractCollection コレクション クラスの削除メソッドです。このメソッドは、さまざまなコレクションを備えており、空の要素を削除できるのに適しています。コードのこの部分を見て、なぜ直接削除するのかという疑問が生じました。ここで it.remove() を使用しますか?

public boolean remove(Object o) { Iterator 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 を例にして説明します。その

継承

構造を下の図に示します。さらに、ArrayList の内部には Iterator の実装クラスがあります。


テストコードを書きます:

AbstractCollection list = new ArrayList<>(); list.add("a"); list.add(null); list.add(null); Iterator iter = list.iterator(); while(iter.hasNext()) { if(iter.next() == null) { iter.remove(); } } System.out.println(list);
ログイン後にコピー

重要な点はやはり iter.next() == null の行です。 next のソースコードは次のとおりです:

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]; }
ログイン後にコピー

cusor ここで

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 が割り当てられます。

3. 削除を実行して、コレクション内の lastRet によって表される要素。削除が完了したら、カーソル ポインターを変更し、expectedModCount と modCount を一致させて、高速失敗を回避します。


【関連おすすめ】

1.

Java無料ビデオチュートリアル

3.JAVAチュートリアルマニュアル

以上がJava AbstractCollectionのremoveメソッドの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!