Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

4 วิธีคัดลอกอาร์เรย์ใน Java (Copy Array)

เวลาทำงานกับอาร์เรย์ใน Java อาจต้องการสร้าง copy ของอาร์เรย์ เช่น ร้านกาแฟสร้างเมนูตามฤดูกาล ต้องการ copy เมนูเดิมมาแก้ไข

ใน Java มีหลายวิธี copy array บทช่วยสอนนี้สำรวจ 4 วิธีทั่วไป อธิบายบรรทัดต่อบรรทัด จบแล้วคุณจะ master การ copy array ใน Java

อาร์เรย์ใน Java

อาร์เรย์ใน Java = container เก็บค่าชนิดเดียว เช่น รายชื่อหนังสือ หรือคะแนนผู้เล่นดาร์ท

อาร์เรย์มีประโยชน์ตอนทำงานกับค่าคล้ายกันเยอะ เพราะเก็บรวมใน collection เดียว ทำให้โค้ดกระชับ และรันเมธอดเดียวกับค่าหลายตัวพร้อมกัน

ตัวอย่างอาร์เรย์เมนูกาแฟ:

String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};

อาร์เรย์ coffees เก็บ String 6 ค่า แต่ละ item มี index เริ่ม 0 ใช้อ้างอิงแต่ละรายการได้

1. คัดลอกด้วย Assignment Operator (Shallow Copy)

วิธีทั่วไป: ใช้ assignment operator (=) กำหนดค่าอาร์เรย์เดิมให้ตัวแปรใหม่ -> สร้าง copy

กลับไปร้านกาแฟ: copy อาร์เรย์ coffees เป็น summer_coffees สำหรับเมนูฤดูร้อน

class CopyAssignment { 
    public static void main(String[] args) { 
        String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; 
        String[] summer_coffees = coffees; 
        for (String c: summer_coffees) { 
            System.out.print(c + ","); 
        } 
    } 
}

ผลลัพธ์: Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White,

อธิบาย: ประกาศ coffees แล้ว summer_coffees = coffees (assignment) for-each พิมพ์ summer_coffees

ข้อจำกัด: สร้าง Shallow Copy ทั้ง 2 ตัวแปรอ้างอิง object เดียวกัน เปลี่ยนค่าในอันหนึ่ง -> อันอื่นเปลี่ยนตาม (เช่นเปลี่ยน Latte -> Summer Latte ใน summer_coffees จะเปลี่ยนใน coffees ด้วย)

2. คัดลอกด้วย For Loop (Deep Copy)

วิธีแรกสร้าง shallow copy เพราะ assign object เดียวกัน ต้องการ Deep Copy = copy ค่า สร้าง object ใหม่ แยกจากเดิม เปลี่ยน array ใหม่ไม่กระทบเดิม

วิธีหนึ่ง: ใช้ for loop วนอ่านค่าเดิม สร้าง array ใหม่

copy coffees -> summer_coffees แบบ deep copy (จะแก้ไขเมนูฤดูร้อน)

import java.util.Arrays; 
class LoopCopy { 
    public static void main(String[] args) { 
        String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; 
        String[] summer_coffees = new String[6]; 
        for (int i = 0; i < coffees.length; ++i) { 
            summer_coffees[i] = coffees[i]; 
        } 
        System.out.println(Arrays.toString(summer_coffees)); 
    } 
}

ผลลัพธ์: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

ขั้นตอน: 1) import Arrays (toString) 2) ประกาศ coffees 3) สร้าง summer_coffees ขนาด 6 4) for loop วน coffees.length ครั้ง 5) summer_coffees[i] = coffees[i] copy ค่าแต่ละ index 6) toString() พิมพ์

3. ใช้ copyOfRange() Method

Arrays.copyOfRange() ใน java.util.Arrays คัดลอกช่วงของอาร์เรย์

ไวยากรณ์:

import java.util.Arrays; 
DataType[] newArray = Arrays.copyOfRange(oldArray, indexPos, length);

พารามิเตอร์:

  1. DataType: ชนิดข้อมูล array ใหม่
  2. newArray: ชื่อ array ใหม่
  3. oldArray: array ต้นทาง
  4. indexPos: เริ่ม copy ที่ index นี้ใน oldArray
  5. length: จำนวนค่าที่จะ copy

ตัวอย่าง: copy ทั้งอาร์เรย์

import java.util.Arrays; 
class CopyUsingRange { 
    public static void main(String[] args) { 
        String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; 
        String[] summer_coffees = Arrays.copyOfRange(coffees, 0, coffees.length); 
        System.out.println("Summer coffees: " + Arrays.toString(summer_coffees)); 
    } 
}

ผลลัพธ์: Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

อธิบาย: import Arrays copyOfRange(coffees, 0, coffees.length) = copy จาก index 0 จนครบ length ทั้งอาร์เรย์

4. ใช้ arraycopy() Method

System.arraycopy() ในคลาส System คัดลอกข้อมูลจาก array ไป array อีกอัน มี options ปรับแต่งได้มาก

ไวยากรณ์:

System.arraycopy(sourceArray, startingPos, newArray, newArrayStartingPos, length);

5 พารามิเตอร์:

  • sourceArray: array ต้นทาง
  • startingPos: index เริ่ม copy ใน source
  • newArray: array ปลายทาง
  • newArrayStartingPos: index เริ่มวางใน newArray
  • length: จำนวน elements ที่ copy

ตัวอย่าง: copy ทั้งอาร์เรย์

import java.util.Arrays; 
class ArrayCopyMethod { 
    public static void main(String[] args) { 
        String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; 
        String[] summer_coffees = new String[6]; 
        System.arraycopy(coffees, 0, summer_coffees, 0, coffees.length); 
        System.out.println("Summer coffees: " + Arrays.toString(summer_coffees)); 
    } 
}

ผลลัพธ์: Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

ขั้นตอน: 1) import Arrays 2) ประกาศ coffees 3) summer_coffees new String[6] 4) arraycopy(coffees, 0, summer_coffees, 0, coffees.length) copy ทั้งหมด 5) พิมพ์ผลลัพธ์

สรุป

การ copy array เป็น operation ทั่วไป บทช่วยสอนนี้ครอบคลุม 4 วิธี:

  1. Assignment operator - Shallow copy (อ้างอิง object เดียวกัน)
  2. For loop - Deep copy (สร้าง object ใหม่ copy ค่า)
  3. Arrays.copyOfRange() - Copy ช่วงที่กำหนด
  4. System.arraycopy() - Copy แบบ low-level ปรับแต่งได้ละเอียด

ตอนนี้คุณพร้อม copy arrays ใน Java อย่างมืออาชีพแล้ว!