Mungkin ada nama untuk apa yang saya inginkan, tetapi saya tidak menyadarinya. Saya perlu sesuatu yang mirip dengan LinkedHashMap
di Jawa, tetapi di mana ia mengembalikan nilai 'sebelumnya' jika tidak ada nilai pada kunci yang ditentukan.
Yaitu, saya memiliki daftar objek yang disimpan oleh kunci integer (yang dalam satuan waktu dalam kasus saya):
; key->value
10->A
15->B
20->C
Jadi, jika saya meminta nilai untuk kunci 0-9, itu akan kembali null
. Bagian khusus adalah jika saya menanyakan sesuatu 10 <= i <= 14 itu akan mengembalikan A. Atau, untuk i> = 20, itu akan mengembalikan C.
Apakah ada struktur data untuk ini?
java
data-structures
Nick
sumber
sumber
Jawaban:
Anda mencari NavigableMap . Ini adalah subtipe dari SortedMap yang juga memiliki beberapa fungsi yang tersedia di samping sifat peta yang sedang diurutkan. Perhatikan bahwa peta Navigable "dimaksudkan untuk menggantikan antarmuka SortedMap." ( Java SE 6 Collections Framework Enhancements ). Segala sesuatu yang saat ini mengimplementasikan
SortedMap
mengimplementasikanNavigableMap
dan ini kemungkinan akan tetap benar.Secara khusus, metode
floorKey(K key)
yang "mengembalikan kunci terbesar kurang dari atau sama dengan kunci yang diberikan, atau nol jika tidak ada kunci seperti itu.Ini hanyalah salah satu dari banyak metode yang memungkinkan Anda untuk mendapatkan kunci atau submaps spesifik dari peta.
Java memiliki dua implementasi NavigableMap - TreeMap dan ConcurrentSkipListMap .
Jika Anda melihat ide / implementasi daftar lompatan Anda akan melihat mengapa itu akan bekerja dengan sangat baik dengan struktur dan kueri tersebut.
sumber
LinkedHashMap
yang ia sebutkan. BaikTreeMap
tidakConcurrentSkipListMap
diperintahkan oleh waktu penyisipan sukaLinkedHashMap
, melainkan mereka diperintahkan olehComparator
Pemesanan Alami atau kunci jika mereka menerapkanComparable
.Apa yang Anda cari adalah tabel simbol yang mendukung operasi yang dipesan. Dan dalam kasus Anda itu adalah operasi lantai.
Implementasi hash dari tabel simbol adalah yang tercepat, tetapi tidak menawarkan operasi yang dipesan tersebut.
Tetapi implementasi pohon dari tabel simbol tidak. Contoh dari itu di Jawa adalah kelas TreeMap
sumber