CopyOnWriteArrayList
Operasi tambah , tetapkan , alih keluar pada koleksi tertentu menghasilkan salinan baharu tatasusunan dalaman yang dibuat. Ini memastikan bahawa kami tidak menangkap ConcurrentModificationException .
Ingatlah bahawa apabila menyalin tatasusunan, hanya rujukan kepada objek disalin, termasuk akses kepada medan elemen bukan-benang-selamat. Koleksi sedemikian paling baik digunakan dalam kes dengan bilangan operasi tulis yang minimum.
CopyOnWriteArrayList<E> ialah analog selamat benang bagi ArrayList , dilaksanakan berdasarkan algoritma CopyOnWrite. Kaedah dan pembina tambahan diterangkan di bawah:
CopyOnWriteArrayList(E[] toCopyIn) | Pembina yang mengambil tatasusunan sebagai input. |
int indexOf(E e, int index) | Mengembalikan indeks elemen pertama yang ditemui, bermula pada indeks yang diberikan. |
int lastIndexOf(E e, int indeks) | Mengembalikan indeks elemen pertama yang ditemui dalam carian terbalik, bermula pada indeks yang diberikan. |
boolean addIfAbsent(E e) | Tambahkan elemen jika tiada dalam koleksi. Kaedah equals digunakan untuk membandingkan unsur . |
int addAllAbsent(Koleksi<? memanjangkan E> c) | Tambahkan elemen jika tiada dalam koleksi. Mengembalikan bilangan elemen yang ditambahkan. |
Antara muka ConcurrentMap
Perlaksanaan HashMap dan TreeMap yang dipertingkat dengan sokongan untuk multithreading dan kebolehskalaan.
ConcurrentMap<K, V> ialah antara muka yang memanjangkan Peta dengan operasi atom tambahan.
V putIfAbsent(kunci K, nilai V) | Menambah pasangan nilai kunci baharu hanya jika kunci tiada dalam koleksi. Mengembalikan nilai sebelumnya untuk kunci yang diberikan. |
boolean remove(kunci objek, nilai objek) | Mengalih keluar pasangan nilai kunci hanya jika kunci yang diberikan sepadan dengan nilai yang diberikan dalam Peta. Mengembalikan benar jika elemen berjaya dialih keluar. |
ganti boolean(kunci K, V oldValue, V newValue) | Menggantikan nilai lama dengan yang baharu dengan kunci hanya jika nilai lama sepadan dengan nilai yang diberikan dalam Peta. Mengembalikan benar jika nilai telah digantikan dengan yang baharu. |
Gantikan V(kunci K, nilai V) | Menggantikan nilai lama dengan yang baharu dengan kunci hanya jika kunci dikaitkan dengan sebarang nilai. Mengembalikan nilai sebelumnya untuk kunci yang diberikan. |
ConcurrentHashMap<K, V> - di sini data dibentangkan dalam bentuk segmen, yang dibahagikan kepada cincangan utama. Akibatnya, jika anda memerlukan akses, maka segmen dikunci, bukan objek. Iterator tidak membuang ConcurrentModificationException dan mewakili data untuk tempoh masa tertentu.
Pelaksanaan ConcurrentHashMap
ConcurrentHashMap<K, V> - di sini data dibentangkan dalam bentuk segmen, dipecahkan mengikut cincangan utama. Akibatnya, akses data dikunci oleh segmen, bukan oleh satu objek. Di samping itu, iterator mewakili data untuk sekeping masa tertentu dan tidak membuang ConcurrentModificationException .
ConcurrentNavigableMap<K,V> - memanjangkan antara muka NavigableMap dan mengembalikan ConcurrentNavigableMap . Semua iterator selamat digunakan dan tidak membuang ConcurrentModificationException .
ConcurrentSkipListMap<K, V> ialah analog TreeMap untuk multithreading. Data diisih mengikut kunci dan prestasi log(N) purata dijamin untukcontainsKey,get,put,remove, dan operasi lain yang serupa.
ConcurrentSkipListSet<E> ialah pelaksanaan antara muka Set berdasarkan ConcurrentSkipListMap .
GO TO FULL VERSION