JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #129. LinkedList และ ArrayList แตกต่างกันอย่าง...

คอฟฟี่เบรค #129. LinkedList และ ArrayList แตกต่างกันอย่างไร? คุณสมบัติใหม่ที่มาใน Java 19

เผยแพร่ในกลุ่ม

LinkedList และ ArrayList แตกต่างกันอย่างไร?

ที่มา: Rrtutors.com หากคุณยังใหม่กับการเขียนโปรแกรม Java คุณต้องสงสัยว่าควรใช้อันไหนดีกว่าเมื่อทำงานกับคอลเลกชัน: LinkedList หรือ ArrayList ทั้งสองคลาสนี้มีฟังก์ชันที่คล้ายคลึงกัน ดังนั้นบางครั้งอาจเป็นเรื่องยากที่จะตัดสินใจว่าจะใช้คลาสใดดีกว่าในการทำงานของคุณ ในโพสต์นี้ เราจะกำหนดความแตกต่างระหว่างสองคลาสและอภิปรายว่าจะใช้งานที่ไหนและเมื่อใด คอฟฟี่เบรค #129.  LinkedList และ ArrayList แตกต่างกันอย่างไร?  คุณสมบัติใหม่ที่มาใน Java 19 - 1

ความแตกต่างระหว่าง ArrayList และ LinkedList ใน Java

มาเปรียบเทียบ ArrayList และ LinkedList ตามเกณฑ์:

การจัดการ

ในทั้งสองกรณี ความเร็วในการจัดการอาเรย์จะแตกต่างกัน ArrayList จัดการอาร์เรย์ได้ช้ากว่า LinkedList นี่เป็นเพราะว่า LinkedList เป็นแบบโหนดและไม่ต้องการการขยับบิตมากนัก

เข้าถึง

ArrayList จัดเก็บและดึงข้อมูลได้เร็วขึ้น ในทางกลับกัน LinkedList รองรับการประมวลผลข้อมูลที่เร็วขึ้น

การนำไปปฏิบัติ

ArrayList ใช้งานเฉพาะรายการ ในขณะที่ LinkedList ใช้งานทั้งรายการและคิว LinkedList ยังมักใช้เป็นคิวอีกด้วย

การดำเนินการภายใน

ArrayList จัดเก็บองค์ประกอบในอาร์เรย์แบบไดนามิก ในขณะที่ LinkedList ใช้รายการที่เชื่อมโยงแบบสองเท่า

เมื่อใดจึงจะใช้ ArrayList และ LinkedList

ArrayList เหมาะสำหรับการทำงานกับคอลเลกชันแบบอ่านอย่างเดียว ในขณะที่ LinkedList เหมาะสำหรับการทำงานกับคอลเลกชันที่อนุญาตให้แก้ไขข้อมูลต่างๆ เช่น การเพิ่มและการลบ

ตัวอย่างรายการที่เชื่อมโยง:

import java.util.LinkedList;

import java.util.List;

public class LinkeddExample {

    public static void main(String[] args) {

        List<String> myGroup=new LinkedList<>();

        myGroup.add("Pohekar");

        myGroup.add("Sumedh");

        myGroup.add("Nikir");

        System.out.println("Create Group: "+myGroup);

        myGroup.remove("Pohekar");

        System.out.println("Remove Group element: "+myGroup);

        myGroup.set(1,"Niha");

        System.out.println("Modify Group: "+myGroup);

    }

}

ตัวอย่าง ArrayList:

import java.util.ArrayList;

import java.util.List;

public class ArrayListExca {

    public static void main(String[] args) {

        List<String> Pro=new ArrayList<>();

        Pro.add("PythonPro");

        Pro.add("JavaPro");

        Pro.add("C#Pro");



        System.out.println("Traversing ArrayList...");

        for(String s:Pro){

            System.out.println(s);


    }

    }

}

JDK 19: คุณสมบัติใหม่ที่มาใน Java 19

ที่มา: เธรด InfoWorld Virtual, การจับคู่รูปแบบสำหรับคำสั่งสวิตช์, vector API และพอร์ต Linux/RISC-V ทั้งหมดนี้จะเปิดตัวในเดือนกันยายนนี้ใน Java 19 ซึ่งเป็นภาษารุ่นใหม่ที่รองรับระยะสั้น นอกจากนี้ Java Development Kit 19 เพิ่งเปิดตัวคุณสมบัติอื่น: การดูตัวอย่างรูปแบบบันทึกสำหรับการนำทางและการประมวลผลข้อมูล ในฐานะที่เป็นส่วนหนึ่งของแผนการปรับปรุงภาษา Java อย่างต่อเนื่อง JDK 19 หรือเพียงแค่ Java 19 ก็มีศักยภาพที่จะมีฟีเจอร์มากมายตั้งแต่ข้อมูลทั่วไปไปจนถึงออบเจ็กต์ที่มีคุณค่า JDK 19 จะเป็นการอัปเดตถัดไปต่อจาก JDK 18 ซึ่งเปิดตัวในวันที่ 22 มีนาคม 2022 Java เวอร์ชันมาตรฐานจะออกทุกๆ หกเดือน นักพัฒนา OpenJDK ได้เผยแพร่กำหนดการเปิดตัวอย่างเป็นทางการสำหรับ JDK 19 ตามนั้น การเปิดตัวที่เสถียรจะปรากฏในวันที่ 20 กันยายน ก่อนหน้านี้ นักพัฒนาจะสามารถทำความคุ้นเคยกับบิวด์เบื้องต้นได้ ซึ่งจะปล่อยในวันที่ 9 มิถุนายน และ 21 กรกฎาคม ผู้สมัครที่เผยแพร่จะได้รับการเผยแพร่ในวันที่ 11 สิงหาคมและ 25 สิงหาคม การ เข้าถึงเบื้องต้นของ JDK 19 มีอยู่ที่jdk.java.net/19 คุณสมบัติที่มีให้ใน JDK 19 ได้แก่:
  • ดูตัวอย่างเทมเพลตบันทึกเพื่อแยกวิเคราะห์ค่าบันทึก เทมเพลตเรกคอร์ดและเทมเพลตประเภทสามารถซ้อนกันได้เพื่อให้มีรูปแบบการนำทางและการประมวลผลข้อมูลที่ชัดเจน มีประสิทธิภาพ และประกอบได้ แนวคิดเบื้องหลังคุณลักษณะนี้คือการเพิ่มส่วนขยายการจับคู่รูปแบบเพื่อแสดงการสืบค้นข้อมูลแบบผสมที่ซับซ้อนมากขึ้น โดยไม่ต้องเปลี่ยนไวยากรณ์หรือความหมายของรูปแบบประเภท ข้อเสนอนี้อิงตามการจับคู่รูปแบบสำหรับอินสแตนซ์ที่เปิดตัวใน JDK 16 ในเดือนมีนาคม 2021 นอกจากนี้ แผนในอนาคตอาจต้องมีการขยายเทมเพลตบันทึกด้วยคุณสมบัติต่างๆ เช่น เทมเพลตอาร์เรย์และเทมเพลต vararg รายการเทมเพลตเป็นส่วนหนึ่งของProject Amberซึ่งมีเป้าหมายเพื่อสำรวจและพัฒนาฟีเจอร์ Java ขนาดเล็กที่เน้นประสิทธิภาพ

  • ดูตัวอย่าง ฟังก์ชันคนต่างด้าว และ API หน่วยความจำ โดยจะแนะนำ API ที่ช่วยให้โปรแกรม Java สามารถโต้ตอบกับโค้ดและข้อมูลภายนอกรันไทม์ Java ได้

    ด้วยการเรียกใช้ฟังก์ชันภายนอกอย่างมีประสิทธิภาพ (โค้ดนอกรันไทม์ Java) และการเข้าถึงหน่วยความจำภายนอกอย่างปลอดภัย (หน่วยความจำไม่ได้จัดการโดย JVM) API จะทำให้โปรแกรม Java เรียกใช้ไลบรารีเนทิฟและประมวลผลข้อมูลเนทีฟโดยไม่มีภัยคุกคามต่อ Java Native Interface (JNI) ).

  • การแสดงตัวอย่างเธรดเสมือน ข้อเสนอนี้แนะนำเธรดน้ำหนักเบาที่ช่วยลดความพยายามในการเขียน การบำรุงรักษา และการตรวจสอบแอปพลิเคชันแบบขนานประสิทธิภาพสูงได้อย่างมาก แนวคิดของข้อเสนอนี้คือการให้ความสามารถในการปรับขนาดแอปพลิเคชันเซิร์ฟเวอร์ที่เขียนในรูปแบบเธรดต่อคำขอที่เรียบง่ายพร้อมการใช้ฮาร์ดแวร์อย่างเหมาะสมที่สุด ซึ่งจะทำให้คุณสามารถปรับใช้เธรดเสมือนในโค้ดที่ใช้java.langThread APIโดยมีการเปลี่ยนแปลงเพียงเล็กน้อย และช่วยให้คุณสามารถแก้ไขปัญหา ดีบัก และทำโปรไฟล์เธรดเสมือนโดยใช้เครื่องมือ JDK ที่มีอยู่

  • ตัวอย่างที่สามของการจับคู่รูปแบบสำหรับนิพจน์และคำสั่งสวิตช์ โดยขยายการจับคู่รูปแบบเพื่อสลับเพื่อให้สามารถทดสอบนิพจน์กับรูปแบบจำนวนหนึ่ง ซึ่งแต่ละรูปแบบมีการดำเนินการเฉพาะ ซึ่งช่วยให้สามารถแสดงการสืบค้นที่เน้นข้อมูลเป็นศูนย์กลางที่ซับซ้อนได้อย่างกระชับและปลอดภัย ก่อนหน้านี้ฟีเจอร์นี้แสดงตัวอย่างใน JDK 17 และ JDK 18 การแสดงตัวอย่างที่สามจะเพิ่มการปรับปรุง รวมถึงการแทนที่การป้องกันเมื่อรูปแบบมีส่วนคำสั่งในบล็อกสวิตช์ แนวคิดของข้อเสนอนี้คือการขยายความหมายและการบังคับใช้ของนิพจน์และตัวดำเนินการของสวิตช์

  • การบ่มเพาะครั้งที่สี่ของ vector APIจะแสดงการคำนวณเวกเตอร์ที่คอมไพล์ ณ รันไทม์ได้อย่างน่าเชื่อถือเป็นคำสั่งเวกเตอร์ที่เหมาะสมที่สุดบนสถาปัตยกรรมโปรเซสเซอร์ที่รองรับ ซึ่งจะให้ประสิทธิภาพที่ดีกว่าการคำนวณสเกลาร์ที่เทียบเท่า นักพัฒนาที่ใช้ API ใหม่จะสามารถเขียนอัลกอริธึมเวกเตอร์ที่ซับซ้อนใน Java โดยใช้ autovectorizer ของ HotSpot ได้ แต่ด้วยโมเดลแบบกำหนดเองที่ทำให้การทำเวกเตอร์สามารถคาดเดาและเชื่อถือได้มากขึ้น ก่อนหน้านี้ Vector API ได้รับการบ่มใน JDK 16, JDK 17 และ JDK 19

    นอกเหนือจาก Vector API แล้ว การดำเนินการรวมช่องสัญญาณระดับบิตจะถูกขยายเพื่อรวมการดำเนินการต่างๆ เช่น การนับจำนวนหนึ่งบิต การย้อนกลับลำดับบิต และการบีบอัดและขยายบิต

  • ด้วย พอร์ต Linux/RISC-V Java จะได้รับการสนับสนุนชุดคำสั่งฮาร์ดแวร์ซึ่งได้รับการสนับสนุนโดยชุดเครื่องมือภาษาที่หลากหลาย RISC-V คือกลุ่มของ ISA ที่เกี่ยวข้อง พอร์ต Linux/RISC-V จะสนับสนุนเฉพาะการกำหนดค่า RV64GV RISC-V ซึ่งเป็น ISA วัตถุประสงค์ทั่วไป 64 บิตที่มีคำสั่งเวกเตอร์

    พอร์ตจะรองรับตัวเลือกเครื่องเสมือน HotSpot ต่อไปนี้: ตัวแปลเทมเพลต, คอมไพเลอร์ JIT C1 (ไคลเอนต์), คอมไพเลอร์ JIT C2 (เซิร์ฟเวอร์) และผู้รวบรวมขยะหลักในปัจจุบันทั้งหมด รวมถึง ZGC และ Shenandoah

เช่นเดียวกับ JDK 18 JDK 19 จะเป็นเวอร์ชันระยะสั้นพร้อมการสนับสนุนเป็นเวลา 6 เดือน รุ่นก่อนหน้านี้ JDK 17 เป็นรุ่น LTS พร้อมการรับประกันการสนับสนุนเป็นเวลาหลายปี เปิดตัวเมื่อวันที่ 14 กันยายน 2021
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION