Javaでのフェイルファストとフェイルセーフの違い
Sr。いいえ。 | キー | ||
---|---|---|---|
1 | 例外 | スレッド中のコレクションの追加、削除、更新など、コレクション内の変更はすべてコレクションを繰り返し、高速スロー同時変更例外をスローします。 | フェイルセーフコレクションは例外をスローしません。 |
2。 | コレクションの種類 | ArrayListとハッシュマップコレクションは、フェイルファストイテレータの例です。 | CopyOnWriteと同時変更は、フェイルセーフイテレータの例です。 |
3。 | パフォーマンスとメモリ | 代わりに実際のコレクションで動作します。したがって、このイテレータは余分なメモリと時間を必要としません | 実際のコレクションではなく、コレクションのクローンに取り組んでいます。時間とメモリの面でオーバーヘッドです |
4。 | 変更 | イテレータは、コレクションを反復処理している間、コレクションを変更することを許可しません。 | フェイルセーフイテレータを使用すると、コレクションを反復処理しながらコレクションを変更できます。 |
フェイルセーフの例
public class FailSafeExample{ public static void main(String[] args){ ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>(); //Adding elements to map map.put("Dell", 1); map.put("IBM", 2); //Getting an Iterator from map Iterator<String> it = map.keySet().iterator(); while (it.hasNext()){ String key = (String) it.next(); System.out.println(key+" : "+map.get(key)); map.put("Google", 3); } } }
出力
IBM :2 Dell:1
フェイルセーフの例
public class FailFastExample{ public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); //Getting an Iterator from list Iterator<Integer> it = list.iterator(); while (it.hasNext()){ Integer integer = (Integer) it.next(); list.add(4); } } }
出力
Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
-
JavaでのArrayListとHashSetの違い
HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり
-
JavaでのIteratorとListIteratorの違い
Javaは、コレクションに格納されているデータを1つずつトラバースするために、これら2つのインターフェースを提供しました。イテレータとリストイテレータの内部実装により、それらは異なりますが、両方のイテレータの主なアジェンダは同じです。 IteratorとListIteratorの重要な違いは次のとおりです。 Sr。いいえ。 キー イテレータ ListIterator 1 該当する イテレータは、コレクションのタイプに関係なく、任意のコレクションをトラバースするために使用できます。 リストイテレータは、arraylist、linkedlistなどのリストコレクションが実装