[解決済み] Arrays.asList(array)とnew ArrayList<Integer>(Arrays.asList(array)) の違いについて
質問
とはどのような違いがあるのでしょうか?
-
List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia)); // Copy
-
List<Integer> list2 = Arrays.asList(ia);
ここで
ia
は整数の配列ですか?
において、いくつかの操作が許可されないことを知りました。
list2
. なぜそうなのでしょうか?
どのようにメモリに保存されるのでしょうか(参照/コピー)?
リストをシャッフルすると
list1
は元の配列に影響を与えませんが
list2
があります。しかし、それでも
list2
はやや分かりにくい。
どのように
ArrayList
をリストにアップキャスティングすることは、新しい
ArrayList
?
list1 differs from (1)
ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));
解決方法は?
-
まず、これが何をするものなのかを見てみましょう。
Arrays.asList(ia)
これは、配列
ia
を実装したラッパーを作成します。List<Integer>
これは、元の配列をリストとして利用できるようにするものです。何もコピーされず,ただ一つのラッパーオブジェクトが作成されます.リストラッパーに対する操作は,元の配列に伝搬されます.つまり,リストラッパーをシャッフルすれば元の配列もシャッフルされ,要素を上書きすれば元の配列も上書きされる,ということです.もちろん,いくつかのList
ラッパーでは、リストへの要素の追加や削除などの操作はできず、要素の読み込みや上書きのみが可能です。リストラッパーは
ArrayList
- というのは、別の種類のオブジェクトです。ArrayList
は独自の内部配列を持っており、そこに要素を格納し、内部配列のサイズを変更することができます。ラッパーは独自の内部配列を持たず、与えられた配列にのみ操作を伝搬します。 -
一方、その後に新しい配列を
new ArrayList<Integer>(Arrays.asList(ia))
を作成した後、新しい
ArrayList
これは、元のものの完全な独立したコピーです。しかし、ここでは、ラッパーをArrays.asList
を構築している間だけ使用されます。ArrayList
その後、ゴミとして回収される。この新しいArrayList
は、元の配列とは完全に独立しています。同じ要素が含まれています (元の配列とこの新しいArrayList
はメモリ上の同じ整数を参照します)、その参照を保持する新しい内部配列を作成します。そのため、シャッフルしたり、要素を追加したり削除したりしても、元の配列は変更されません。
関連
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] リストにおけるdel、remove、popの違いについて
-
[解決済み] リストとタプルの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] アニメーションGIFの表示
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] java swingアプリケーションでJCEがプロバイダBCを認証できない