Saya punya dua daftar (bukan daftar java, Anda bisa mengatakan dua kolom)
Sebagai contoh
**List 1** **Lists 2**
milan hafil
dingo iga
iga dingo
elpha binga
hafil mike
meat dingo
milan
elpha
meat
iga
neeta.peeta
Saya ingin metode yang mengembalikan berapa banyak elemen yang sama. Untuk contoh ini seharusnya 3 dan harus mengembalikan nilai yang sama dari daftar dan nilai yang berbeda juga.
Haruskah saya menggunakan hashmap jika ya lalu metode apa untuk mendapatkan hasil saya?
Tolong bantu
PS: Itu bukan tugas sekolah :) Jadi kalau dibimbing saja sudah cukup
java
list
comparison
hashmap
pengguna238384
sumber
sumber
Jawaban:
EDIT
Ini adalah dua versi. Satu penggunaan
ArrayList
dan penggunaan lainnyaHashSet
Bandingkan mereka dan buat versi Anda sendiri dari ini, sampai Anda mendapatkan yang Anda butuhkan.
Ini seharusnya cukup untuk menutupi:
bagian dari pertanyaan Anda.
melanjutkan dengan jawaban asli:
Anda dapat menggunakan a
java.util.Collection
dan / ataujava.util.ArrayList
untuk itu.The retainAll Metode melakukan berikut ini:
lihat contoh ini:
EDIT
Untuk bagian kedua (nilai serupa) Anda dapat menggunakan metode removeAll :
Versi kedua ini memberi Anda juga nilai yang serupa dan pegangan yang berulang (dengan membuangnya).
Kali ini
Collection
bisa menjadiSet
bukan aList
(perbedaannya adalah, Set tidak mengizinkan nilai berulang)Keluaran:
Jika tidak melakukan apa yang Anda butuhkan, itu memberi Anda awal yang baik sehingga Anda dapat menangani dari sini.
Pertanyaan untuk pembaca: Bagaimana Anda akan memasukkan semua nilai yang diulang?
sumber
listOne
, tetapi tetap memberi +1!Anda dapat mencoba
intersection()
dansubtract()
metode dariCollectionUtils
.intersection()
metode memberi Anda koleksi yang berisi elemen umum dansubtract()
metode memberi Anda semua yang tidak umum.Mereka juga harus menjaga elemen serupa
sumber
Apakah ini benar-benar daftar (diurutkan, dengan duplikat), atau apakah mereka set (tidak berurutan, tidak ada duplikat)?
Karena jika yang terakhir, maka Anda dapat menggunakan, katakanlah, a
java.util.HashSet<E>
dan melakukan ini dalam waktu linier yang diharapkan dengan menggunakan kemudahanretainAll
.sumber
Menggunakan java 8 removeIf
sumber
Jika Anda mencari cara praktis untuk menguji persamaan dua koleksi, Anda dapat menggunakan
org.apache.commons.collections.CollectionUtils.isEqualCollection
, yang membandingkan dua koleksi terlepas dari urutannya.sumber
Dari semua pendekatan, menurut saya menggunakan
org.apache.commons.collections.CollectionUtils#isEqualCollection
adalah pendekatan terbaik. Inilah alasannya -Jika tidak memungkinkan untuk memiliki
apache.commons.collections
ketergantungan, saya akan merekomendasikan untuk menerapkan algoritme berikut ini untuk memeriksa kesetaraan daftar karena efisiensinya.sumber
Solusi sederhana: -
Keluaran: -
sumber
Dengan asumsi
hash1
danhash2
sumber
Saya menemukan contoh yang sangat mendasar dari Perbandingan daftar di Perbandingan Daftar Contoh ini memverifikasi ukuran terlebih dahulu dan kemudian memeriksa ketersediaan elemen tertentu dari satu daftar di daftar lainnya.
sumber
sumber
? true :false
diperlukan dalam cuplikan Anda?