Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでのディープコピーとシャローコピー


ディープコピーとシャローコピーはどちらも、さまざまな方法で指定されたオブジェクトのコピーを作成することを指します-

浅いコピー

これは基本的にオブジェクトの新しいインスタンスを作成し、元のデータセットから新しく作成されたインスタンスにすべてのデータをコピーします。これは、新しく作成されたインスタンスを元のオブジェクトに具体的にキャストする必要があることを意味します。 「浅いクローン」とも呼ばれます。

import java.util.* ;
class Demo{
   private int[] my_data;
   public Demo(int[] my_vals){
      my_data = my_vals;
   }
   public void display_data(){
      System.out.println(Arrays.toString(my_data) );
   }
}
public class Use_Demo{
   public static void main(String[] args){
      int[] my_vals = {56, 89, 91};
      Demo my_inst = new Demo(my_vals);
      my_inst.display_data();
      my_vals[0] = 65;
      my_inst.display_data();
   }
}

出力

[56, 89, 91]
[65, 89, 91]

Demoという名前のクラスには、変数と、配列の要素を新しい配列にコピーするコンストラクターが含まれています。 「display_data」という名前の別の関数は、このデータの配列を表示します。 main関数では、インスタンスが作成され、配列が定義され、関数が呼び出されます。関連する出力がコンソールに表示され、すべての変更が反映されます。

ディープコピー

これは、さまざまな目的や使用法のためにデータの個別のコピーが必要な場合に使用されます。クラスのすべてのメンバーは、「Cloneable」インターフェースを実装し、「clone」メソッドをオーバーライドする必要があります。

import java.util.*;
class Demo{
   private int[] my_data;
   public Demo(int[] my_vals){
      my_data = new int[my_vals.length];
      for (int i = 0; i < my_data.length; i++){
         my_data[i] = my_vals[i];
      }
   }
   public void display_data(){
      System.out.println(Arrays.toString(my_data));
   }
}
public class Use_Demo{
   public static void main(String[] args){
      int[] my_vals = {56, 89, 91};
      Demo my_inst = new Demo(my_vals);
      my_inst.display_data();
      my_vals[0] = 65;
      my_inst.display_data();
   }
}

出力

[56, 89, 91]
[56, 89, 91]

Demoという名前のクラスには、変数と、配列を反復処理して別の配列にコピーするコンストラクターが含まれています。 「display_data」という名前の別の関数は、このデータの配列を表示します。 main関数では、インスタンスが作成され、配列が定義され、関数が呼び出されます。関連する出力がコンソールに表示され、すべての変更が反映されます。


  1. JavaでJTextAreaの切り取り、コピー、貼り付け機能を無効にするにはどうすればよいですか?

    A JTextArea JTextComponentのサブクラスです クラスであり、複数行のテキストコンポーネント テキストを表示するか、ユーザーがテキストを入力できるようにします。 JTextAreaはCaretListenerを生成できます JTextAreaの機能を実装しようとしているときのインターフェース。デフォルトでは、 JTextArea クラスは切り取り、コピー、貼り付けをサポートできます 機能については、無効またはオフにすることもできます 切り取り、コピー、貼り付けの機能 getInputMap()。put()を使用する JTextAreaのメソッド クラス。 K

  2. JavaでJTextFieldの切り取り、コピー、貼り付け機能を実装するにはどうすればよいですか?

    JTextField JTextComponentのサブクラスです 1行のテキストの編集を可能にするクラス 。 cut()、copy()、paste()を使用して、JTextFieldコンポーネントに切り取り、コピー、貼り付けの機能を実装できます。 メソッド。これらは事前定義です JTextFeildクラスのメソッド。 構文 public void cut() public void copy() public void paste() 例 import java.awt.*; import java.awt.event.*; import javax.swing.*; import j