CopyOnWriteArrayList

การดำเนินการเพิ่ม , ตั้งค่า , ลบ ใน คอลเล็กชันที่กำหนดส่งผลให้มีการสร้างสำเนาใหม่ของอาร์เรย์ภายใน สิ่งนี้ทำให้มั่นใจได้ว่า เราจะไม่พบConcurrentModificationException

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

CopyOnWriteArrayList<E>เป็นอะนาล็อกที่ปลอดภัยสำหรับเธรดของ ArrayListซึ่งใช้งานบนพื้นฐานของอัลกอริทึม CopyOnWrite วิธีการเพิ่มเติมและคอนสตรัคอธิบายด้านล่าง:

CopyOnWriteArrayList(E[] toCopyIn) ตัวสร้างที่ใช้อาร์เรย์เป็นอินพุต
int indexOf(E อี ดัชนี int) ส่งกลับดัชนีขององค์ประกอบแรกที่พบ โดยเริ่มต้นที่ดัชนีที่กำหนด
int lastIndexOf(E อี ดัชนี int) ส่งกลับดัชนีขององค์ประกอบแรกที่พบในการค้นหาแบบย้อนกลับ โดยเริ่มต้นที่ดัชนีที่กำหนด
บูลีน addIfAbsent(E อี) เพิ่มองค์ประกอบหากไม่ได้อยู่ในคอลเลกชัน ใช้วิธีเท่ากับ เพื่อเปรียบเทียบ องค์ประกอบ
int addAllAbsent (คอลเลกชัน <? ขยาย E> c) เพิ่มองค์ประกอบหากไม่ได้อยู่ในคอลเลกชัน ส่งกลับจำนวนองค์ประกอบที่เพิ่ม

อินเทอร์เฟซ ConcurrentMap

ปรับปรุงการใช้งานHashMapและTreeMapด้วยการสนับสนุนมัลติเธรดและความสามารถในการปรับขนาด

ConcurrentMap<K, V>เป็นอินเทอร์เฟซที่ขยายแผนที่ด้วยการดำเนินการอะตอมมิกเพิ่มเติม

V putIfAbsent(คีย์ K, ค่า V) เพิ่มคู่คีย์-ค่าใหม่เฉพาะในกรณีที่คีย์ไม่ได้อยู่ในคอลเล็กชัน ส่งกลับค่าก่อนหน้าสำหรับคีย์ที่กำหนด
บูลีนลบ (คีย์วัตถุ, ค่าวัตถุ) ลบคู่คีย์-ค่าเฉพาะเมื่อคีย์ที่กำหนดตรงกับค่าที่กำหนดในแผนที่ คืนค่าจริงหากลบองค์ประกอบสำเร็จ
บูลีนแทนที่ (คีย์ K, V oldValue, V newValue) แทนที่ค่าเก่าด้วยค่าใหม่โดยคีย์ก็ต่อเมื่อค่าเก่าตรงกับค่าที่กำหนดในแผนที่เท่านั้น คืนค่าจริงหากค่าถูกแทนที่ด้วยค่าใหม่
V แทนที่ (คีย์ K, ค่า V) แทนที่ค่าเก่าด้วยค่าใหม่ด้วยคีย์เฉพาะเมื่อคีย์เชื่อมโยงกับค่าใดๆ ส่งกลับค่าก่อนหน้าสำหรับคีย์ที่กำหนด

ConcurrentHashMap<K, V> - ที่นี่ข้อมูลจะถูกนำเสนอในรูปแบบของกลุ่มซึ่งแบ่งออกเป็นคีย์แฮช ดังนั้น ถ้าคุณต้องการเข้าถึง เซ็กเมนต์จะถูกล็อก ไม่ใช่อ็อบเจ็กต์ ตัววนซ้ำไม่โยน ConcurrentModificationExceptionและแสดงข้อมูลในช่วงเวลาหนึ่ง

การใช้งาน ConcurrentHashMap

ConcurrentHashMap<K, V> - ที่นี่ข้อมูลจะถูกนำเสนอในรูปแบบของเซ็กเมนต์ แบ่งตามคีย์แฮช ด้วยเหตุนี้ การเข้าถึงข้อมูลจึงถูกล็อคตามกลุ่ม ไม่ใช่โดยวัตถุเดียว นอกจากนี้ ตัววนซ้ำจะแสดงข้อมูลสำหรับช่วงเวลาหนึ่ง ๆและไม่โยน ConcurrentModificationException

ConcurrentNavigableMap<K,V> - ขยายเท อร์เฟ ซ NavigableMapและส่งคืน ConcurrentNavigableMap ตัววนซ้ำทั้งหมดใช้งานได้อย่างปลอดภัยและห้ามทิ้ง ConcurrentModificationException

ConcurrentSkipListMap<K, V>เป็นอะนาล็อกของ TreeMapสำหรับการทำงานแบบมัลติเธรด ข้อมูลถูกจัดเรียงตามคีย์และประสิทธิภาพการบันทึกเฉลี่ย (N) รับประกันสำหรับcontainerKey,get,put,removeและการดำเนินการอื่นๆ ที่คล้ายกัน

ConcurrentSkipListSet<E>เป็นการใช้งานเท อร์เฟ ซ Setตาม ConcurrentSkipListMap