LinkedHashMap Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Tabel hash dan implementasi daftar tertaut antarmuka Map , dengan urutan pertemuan yang terdefinisi dengan baik.
[Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class LinkedHashMap : Java.Util.HashMap, IDisposable, Java.Util.ISequencedMap
[<Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type LinkedHashMap = class
inherit HashMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ISequencedMap
- Warisan
- Atribut
- Penerapan
Keterangan
Tabel hash dan implementasi daftar tertaut antarmuka Map , dengan urutan pertemuan yang terdefinisi dengan baik. Implementasi ini berbeda dari HashMap dalam bahwa ia mempertahankan daftar yang ditautkan doubly yang berjalan melalui semua entrinya. Daftar tertaut ini mendefinisikan urutan pertemuan (urutan iterasi), yang biasanya merupakan urutan di mana kunci dimasukkan ke dalam peta (urutan penyisipan). Entri yang terakhir dimasukkan (yang tertua) adalah yang pertama, dan entri termuda terakhir. Perhatikan bahwa pesanan pertemuan tidak terpengaruh jika kunci dimasukkan kembali ke dalam peta dengan put metode . (Kunci k dimasukkan kembali ke dalam peta m jika m.put(k, v) dipanggil ketika m.containsKey(k) akan segera kembali true sebelum pemanggilan.) Tampilan terbalik peta ini berada dalam urutan berlawanan, dengan entri termuda muncul pertama dan entri tertua muncul terakhir. Urutan pertemuan entri yang sudah ada di peta dapat diubah dengan menggunakan #putFirst putFirst metode dan #putLast putLast .
Implementasi ini mengampuni kliennya dari urutan yang tidak ditentukan, umumnya kacau yang disediakan oleh HashMap (dan Hashtable), tanpa menimbulkan peningkatan biaya yang terkait dengan TreeMap. Ini dapat digunakan untuk menghasilkan salinan peta yang memiliki urutan yang sama dengan aslinya, terlepas dari implementasi peta asli:
{@code
void foo(Map<String, Integer> m) {
Map<String, Integer> copy = new LinkedHashMap<>(m);
...
}
}
Teknik ini sangat berguna jika modul mengambil peta pada input, menyalinnya, dan kemudian mengembalikan hasil yang urutannya ditentukan oleh salinan. (Klien umumnya menghargai memiliki hal-hal yang dikembalikan dalam urutan yang sama seperti yang disajikan.)
#LinkedHashMap(int,float,boolean) constructor Khusus disediakan untuk membuat peta hash tertaut yang urutan pertemuannya adalah urutan entrinya terakhir diakses, dari yang paling tidak baru diakses ke yang terbaru (urutan akses). Peta semacam ini sangat cocok untuk membangun cache LRU.
putMemanggil metode , , putIfAbsentget, getOrDefaultcompute, computeIfAbsent, computeIfPresent, atau merge menghasilkan akses ke entri yang sesuai (dengan asumsi itu ada setelah pemanggilan selesai). Metode replace hanya menghasilkan akses entri jika nilai diganti. Metode ini putAll menghasilkan satu akses entri untuk setiap pemetaan dalam peta yang ditentukan, dalam urutan pemetaan nilai kunci disediakan oleh iterator kumpulan entri peta yang ditentukan. Tidak ada metode lain yang menghasilkan akses entri. Memanggil metode ini pada tampilan terbalik menghasilkan akses ke entri di peta dukungan. Perhatikan bahwa dalam tampilan terbalik, akses ke entri memindahkannya terlebih dahulu dalam urutan pertemuan. Metode penempatan eksplisit seperti putFirst atau lastEntry, baik di peta atau pada tampilan yang diurutkan terbalik, lakukan operasi pemosisian dan tidak menghasilkan akses entri. Operasi pada keySettampilan , values, dan entrySet atau pada rekan-rekan berurutan mereka tidak memengaruhi urutan pertemuan peta dukungan.
Metode #removeEldestEntry(Map.Entry) ini dapat ditimpa untuk memberlakukan kebijakan untuk menghapus pemetaan kedaluarsa secara otomatis ketika pemetaan baru ditambahkan ke peta. Atau, karena entri "tertua" adalah entri pertama dalam urutan pertemuan, program dapat memeriksa dan menghapus pemetaan kedaluarsa melalui penggunaan #firstEntry firstEntry metode dan #pollFirstEntry pollFirstEntry .
Kelas ini menyediakan semua operasi dan Map opsionalSequencedMap, dan mengizinkan elemen null. Seperti HashMap, ini memberikan performa waktu konstan untuk operasi dasar (add, contains dan remove), dengan asumsi fungsi hash menyebarkan elemen dengan benar di antara wadah. Performa kemungkinan hanya sedikit di bawah dari , karena biaya tambahan untuk mempertahankan daftar yang ditautkan, dengan satu pengecualian: Iterasi atas tampilan HashMap koleksi membutuhkan waktu yang LinkedHashMapsebanding dengan ukuran peta, terlepas dari kapasitasnya. Iterasi atas HashMap kemungkinan akan lebih mahal, membutuhkan waktu sebanding dengan kapasitasnya.
Peta hash tertaut memiliki dua parameter yang memengaruhi performanya: kapasitas awal dan faktor beban. Mereka didefinisikan dengan tepat seperti untuk HashMap. Namun, perhatikan bahwa penalti untuk memilih nilai yang terlalu tinggi untuk kapasitas awal kurang parah untuk kelas ini daripada untuk HashMap, karena waktu iterasi untuk kelas ini tidak terpengaruh oleh kapasitas.
<kuat>Perhatikan bahwa implementasi ini tidak disinkronkan.</strong> Jika beberapa utas mengakses peta hash yang ditautkan secara bersamaan, dan setidaknya salah satu utas memodifikasi peta secara struktural, itu <em>harus</em> disinkronkan secara eksternal. Ini biasanya dicapai dengan menyinkronkan pada beberapa objek yang secara alami merangkum peta.
Jika tidak ada objek seperti itu, peta harus "dibungkus" menggunakan Collections#synchronizedMap Collections.synchronizedMap metode . Ini paling baik dilakukan pada waktu pembuatan, untuk mencegah akses tidak disengaja yang tidak disinkronkan ke peta:
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
Modifikasi struktural adalah operasi apa pun yang menambahkan atau menghapus satu atau beberapa pemetaan atau, dalam kasus peta hash tertaut yang diurutkan akses, memengaruhi urutan perulangan. Dalam peta hash tertaut yang diurutkan penyisipan, hanya mengubah nilai yang terkait dengan kunci yang sudah terkandung dalam peta bukanlah modifikasi struktural.
<kuat>Dalam peta hash tertaut yang diurutkan akses, hanya mengkueri peta dengan get adalah modifikasi struktural.
</strong>)
Iterator yang dikembalikan oleh iterator metode koleksi yang dikembalikan oleh semua metode tampilan koleksi kelas ini adalah <em>fail-fast</em>: jika peta dimodifikasi secara struktural kapan saja setelah iterator dibuat, dengan cara apa pun kecuali melalui metode iterator sendiri remove , iterator akan melemparkan ConcurrentModificationException. Dengan demikian, dalam menghadapi modifikasi bersamaan, iterator gagal dengan cepat dan bersih, daripada berisiko perilaku arbitrer dan non-deterministik pada waktu yang tidak ditentukan di masa depan.
Perhatikan bahwa perilaku fail-fast dari iterator tidak dapat dijamin apa adanya, umumnya, tidak mungkin untuk membuat jaminan keras dengan adanya modifikasi bersamaan yang tidak disinkronkan. Iterator fail-fast melempar ConcurrentModificationException berdasarkan upaya terbaik. Oleh karena itu, akan salah untuk menulis program yang bergantung pada pengecualian ini untuk kebenarannya: perilaku iterator yang gagal cepat harus digunakan hanya untuk mendeteksi bug.
Pemisah yang dikembalikan oleh metode pemisah koleksi yang dikembalikan oleh semua metode tampilan koleksi kelas ini adalah <pengikatan>< terlambat/em>, <em>fail-fast</em>, dan juga melaporkan Spliterator#ORDERED.
<em>Note</em>: Implementasi pemisah ini di Android Nougat (api level 24 dan 25) menggunakan urutan yang salah (tidak konsisten dengan iterator, yang menggunakan urutan yang benar), meskipun melaporkan Spliterator#ORDERED. Anda dapat menggunakan fragmen kode berikut untuk mendapatkan Spliterator yang diurutkan dengan benar pada API level 24 dan 25: <ul><li>Untuk tampilan c = lhm.keySet()Koleksi , c = lhm.entrySet() atau c = lhm.values(), gunakan java.util.Spliterators.spliterator(c, c.spliterator().characteristics()) alih-alih c.spliterator().
<li>Alih-alih c.stream() atau c.parallelStream(), gunakan java.util.stream.StreamSupport.stream(spliterator, false) untuk membangun (nonparallel) java.util.stream.Stream dari .Spliterator
</ul> Perhatikan bahwa solusi ini hanya disarankan di mana lhm adalah LinkedHashMap.
Kelas ini adalah anggota Java Collections Framework.
Ditambahkan dalam 1.4.
Java dokumentasi untuk java.util.LinkedHashMap.
Bagian dari halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Android Open Source Project dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Creative Commons 2.5 Lisensi Atribusi.
Konstruktor
| Nama | Deskripsi |
|---|---|
| LinkedHashMap() |
Membangun instans yang diurutkan |
| LinkedHashMap(IDictionary) |
Membuat instans yang diurutkan |
| LinkedHashMap(Int32, Single, Boolean) |
Membuat instans kosong |
| LinkedHashMap(Int32, Single) |
Membuat instans yang diurutkan |
| LinkedHashMap(Int32) |
Membuat instans yang diurutkan |
| LinkedHashMap(IntPtr, JniHandleOwnership) |
Konstruktor yang digunakan saat membuat representasi terkelola objek JNI; dipanggil oleh runtime. |
Properti
| Nama | Deskripsi |
|---|---|
| Class |
Mengembalikan kelas runtime dari . |
| Handle |
Handel ke instans Android yang mendasar. (Diperoleh dari Object) |
| IsEmpty |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| JniIdentityHashCode |
Mendapatkan kode hash identitas yang ditetapkan ke Java peer ini oleh runtime interop. (Diperoleh dari Object) |
| JniManagedPeerState |
Tabel hash dan implementasi daftar tertaut antarmuka |
| JniPeerMembers |
Tabel hash dan implementasi daftar tertaut antarmuka |
| PeerReference |
Mendapatkan referensi objek JNI untuk peer Java ini. (Diperoleh dari Object) |
| ThresholdClass |
API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. |
| ThresholdType |
API ini mendukung infrastruktur Mono untuk Android dan tidak dimaksudkan untuk digunakan langsung dari kode Anda. |
Metode
| Nama | Deskripsi |
|---|---|
| Clear() |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| Clone() |
Mengembalikan salinan dangkal instans ini |
| Compute(Object, IBiFunction) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| ComputeIfAbsent(Object, IFunction) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| ComputeIfPresent(Object, IBiFunction) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| ContainsKey(Object) |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| ContainsValue(Object) |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| Dispose() |
Merilis sumber daya yang dipegang oleh rekan Java ini. (Diperoleh dari Object) |
| Dispose(Boolean) |
Merilis sumber daya yang dipegang oleh rekan Java ini. (Diperoleh dari Object) |
| DisposeUnlessReferenced() |
Tabel hash dan implementasi daftar tertaut antarmuka |
| EntrySet() |
Mengembalikan |
| Equals(Object) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| Equals(Object) |
Menunjukkan apakah beberapa objek lain "sama dengan" yang satu ini. (Diperoleh dari Object) |
| ForEach(IBiConsumer) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| Get(Object) |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| GetHashCode() |
Mengembalikan nilai kode hash untuk objek . (Diperoleh dari Object) |
| GetOrDefault(Object, Object) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| JavaFinalize() |
Dipanggil oleh pengumpul sampah pada objek ketika pengumpulan sampah menentukan bahwa tidak ada lagi referensi ke objek. (Diperoleh dari Object) |
| KeySet() |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| Merge(Object, Object, IBiFunction) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| NewLinkedHashMap(Int32) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| Notify() |
Membangunkan satu utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| NotifyAll() |
Membangunkan semua utas yang menunggu monitor objek ini. (Diperoleh dari Object) |
| Put(Object, Object) |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| PutAll(IDictionary) |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| PutFirst(Object, Object) |
Untuk ditambahkan |
| PutIfAbsent(Object, Object) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| PutLast(Object, Object) |
Untuk ditambahkan |
| Remove(Object, Object) |
Menghapus pemetaan untuk kunci yang ditentukan dari peta ini jika ada. (Diperoleh dari HashMap) |
| Remove(Object) |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| RemoveEldestEntry(IMapEntry) |
Mengembalikan |
| Replace(Object, Object, Object) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| Replace(Object, Object) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| ReplaceAll(IBiFunction) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| Reversed() |
Tabel hash dan implementasi daftar tertaut antarmuka |
| SequencedEntrySet() |
Tabel hash dan implementasi daftar tertaut antarmuka |
| SequencedKeySet() |
Tabel hash dan implementasi daftar tertaut antarmuka |
| SequencedValues() |
Tabel hash dan implementasi daftar tertaut antarmuka |
| SetHandle(IntPtr, JniHandleOwnership) |
Mengatur properti Handle. (Diperoleh dari Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| Size() |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| ToArray<T>() |
Membuat array terkelola dari pembungkus array Java ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan representasi string objek. (Diperoleh dari Object) |
| UnregisterFromRuntime() |
Membatalkan pendaftaran peer Java ini dari runtime interop. (Diperoleh dari Object) |
| Values() |
Untuk ditambahkan (Diperoleh dari AbstractMap) |
| Wait() |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <diberitahu></em> atau <em>terganggu</em>. (Diperoleh dari Object) |
| Wait(Int64, Int32) |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah waktu nyata berlalu. (Diperoleh dari Object) |
| Wait(Int64) |
Menyebabkan utas saat ini menunggu sampai terbangun, biasanya dengan <>diberitahu</em> atau <em>terganggu</em>, atau sampai sejumlah waktu nyata berlalu. (Diperoleh dari Object) |
Implementasi Antarmuka Eksplisit
| Nama | Deskripsi |
|---|---|
| IJavaPeerable.Disposed() |
Tabel hash dan implementasi daftar tertaut antarmuka |
| IJavaPeerable.Finalized() |
Tabel hash dan implementasi daftar tertaut antarmuka |
| IJavaPeerable.JniObjectReferenceControlBlock |
Tabel hash dan implementasi daftar tertaut antarmuka |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| IJavaPeerable.UnregisterFromRuntime() |
Tabel hash dan implementasi daftar tertaut antarmuka |
Metode Ekstensi
| Nama | Deskripsi |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Mendapatkan nama JNI dari jenis instans |
| JavaAs<TResult>(IJavaPeerable) |
Cobalah untuk memaksa |
| JavaCast<TResult>(IJavaObject) |
Melakukan konversi jenis yang diperiksa runtime Android. |
| JavaCast<TResult>(IJavaObject) |
Tabel hash dan implementasi daftar tertaut antarmuka |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Cobalah untuk memaksa |