ก่อนอื่นเราจะดูทั้งสองหมวดหมู่ที่ใช้อินเทอร์เฟซรายการและมีคลาสการใช้งานสามคลาสในรายการอินเทอร์เฟซรายการคือ ArrayList, Vector และ LinkedList รายการใช้เพื่อจัดเก็บองค์ประกอบหลายอย่างสามารถรักษาลำดับขององค์ประกอบและอนุญาตให้มีการทำซ้ำขององค์ประกอบ
ความแตกต่างที่เกี่ยวข้องระหว่างคลาสการใช้งานเฉพาะสามคลาสมีดังนี้:
1. ArrayList เป็นคลาสการใช้งานรายการที่ใช้กันมากที่สุดซึ่งใช้งานภายในผ่านอาร์เรย์ซึ่งช่วยให้การเข้าถึงองค์ประกอบแบบสุ่มอย่างรวดเร็ว ข้อเสียของอาร์เรย์คือไม่สามารถเว้นระยะระหว่างแต่ละองค์ประกอบ เมื่อขนาดอาร์เรย์ไม่พอใจความสามารถในการจัดเก็บจะต้องเพิ่มขึ้น มีความจำเป็นที่จะต้องบอกว่าข้อมูลของอาร์เรย์นั้นถูกคัดลอกไปยังพื้นที่เก็บข้อมูลใหม่ เมื่อแทรกหรือลบองค์ประกอบจากตำแหน่งกลางของ ArrayList อาร์เรย์จะต้องคัดลอกย้ายและค่าใช้จ่ายค่อนข้างสูง ดังนั้นจึงเหมาะสำหรับการค้นหาแบบสุ่มและการสำรวจข้ามไม่ใช่สำหรับการแทรกและการลบ
2. เวคเตอร์ ยังถูกนำไปใช้ผ่านอาร์เรย์ความแตกต่างคือรองรับการซิงโครไนซ์เธรดนั่นคือในช่วงเวลาหนึ่งมีเพียงหนึ่งเธรดที่สามารถเขียนเวกเตอร์เพื่อหลีกเลี่ยงความไม่สอดคล้องกันที่เกิดจากหลายเธรดที่เขียนในเวลาเดียวกัน
3. LinkedList ใช้โครงสร้างรายการที่เชื่อมโยงเพื่อจัดเก็บข้อมูลซึ่งเหมาะมากสำหรับการแทรกแบบไดนามิกและการลบข้อมูลและการเข้าถึงแบบสุ่มและความเร็วในการเดินทางนั้นค่อนข้างช้า นอกจากนี้ยังมีวิธีการที่ไม่ได้กำหนดไว้ในอินเทอร์เฟซรายการซึ่งใช้โดยเฉพาะในการใช้งานส่วนหัวของตารางและองค์ประกอบหางและสามารถใช้เป็นสแต็กคิวและคิวแบบสองทิศทาง
เมื่อดูที่ซอร์สโค้ด Java ฉันพบว่าเมื่อขนาดของอาร์เรย์ไม่เพียงพอฉันต้องสร้างอาร์เรย์อีกครั้งแล้วคัดลอกองค์ประกอบลงในอาร์เรย์ใหม่ ขนาดของอาร์เรย์ที่ต่อเนื่องของ ArrayList และ Vector นั้นแตกต่างกัน
ArrayList:
บูลีนสาธารณะเพิ่ม (e e) {ensurecapacity (ขนาด + 1); // เพิ่มองค์ประกอบเพื่อพิจารณาว่าพวกเขาสามารถรองรับได้หรือไม่ หากคุณทำไม่ได้คุณต้องสร้างอาร์เรย์ ElementData ใหม่ [Size ++] = E; return true;} โมฆะสาธารณะ ensurecapacity (int mincapacity) {modcount ++; int oldcapacity = elementData.length; if (mincapacity> oldcapacity) {object olddata [] = elementData; // บรรทัดนี้ไม่ได้แสดงประโยชน์ฉันไม่รู้ว่านักพัฒนากำลังคิดอะไรเกี่ยวกับ int newCapacity = (oldCapacity * 3)/2 + 1; // เพิ่มขนาดของอาร์เรย์ใหม่ถ้า (newCapacity <mincapacity) newCapacity = mincapacity; // mincapacity มักจะใกล้เคียงกับขนาดดังนั้นนี่คือการชนะ: elementData = arrays.copyof (ElementData, newCapacity); -ในเวกเตอร์:
โมฆะส่วนตัว ensureCapacityHelper (int mincapacity) {int oldcapacity = elementData.length; if (mincapacity> oldcapacity) {object [] oldData = elementData; int newCapacity = (ความสามารถในการกำหนด> 0)? (OldCapacity + ความสามารถในการผลิต): (OldCapacity * 2); if (newCapacity <mincapacity) {newCapacity = mincapacity; } elementData = arrays.copyof (ElementData, newCapacity); -ความแตกต่างระหว่าง ArrayList และ Vector มีดังนี้:
ArrayList ขยายตัว 50% + 1 โดยค่าเริ่มต้นเมื่อมีหน่วยความจำไม่เพียงพอและเวกเตอร์ขยาย 1 ครั้งโดยค่าเริ่มต้น
เวกเตอร์ให้อินเทอร์เฟซ indexof (obj, start) แต่ arraylist ไม่ได้
เวกเตอร์อยู่ในระดับความปลอดภัยของด้าย แต่ในกรณีส่วนใหญ่เวกเตอร์ไม่ได้ใช้เพราะความปลอดภัยของด้ายต้องใช้ค่าใช้จ่ายของระบบมากขึ้น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น