Apa perbedaan mendasar antara Set<E>
dan List<E>
antarmuka?
Apa perbedaan mendasar antara Set<E>
dan List<E>
antarmuka?
Jawaban:
List
adalah urutan Set
elemen yang terurut sedangkan daftar elemen berbeda yang tidak terurut (terima kasih, Quinn Taylor ).
Koleksi yang dipesan (juga dikenal sebagai urutan). Pengguna antarmuka ini memiliki kontrol yang akurat atas di mana dalam daftar setiap elemen dimasukkan. Pengguna dapat mengakses elemen dengan indeks integer mereka (posisi dalam daftar), dan mencari elemen dalam daftar.
Koleksi yang tidak mengandung elemen duplikat. Lebih formal, set tidak mengandung pasangan elemen e1 dan e2 sehingga e1.equals (e2), dan paling banyak satu elemen nol. Seperti tersirat dari namanya, antarmuka ini memodelkan abstraksi set matematis.
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Daftar elemen yang dipesan (unik atau tidak)
Sesuai dengan antarmuka Java bernamaList
Dapat diakses oleh indeks
diimplemetasikan menggunakan
Daftar elemen yang unik:
Sesuai dengan antarmuka Java bernamaSet
Bisa tidak diakses oleh indeks
diimplemetasikan menggunakan
Keduanya antarmuka Set
dan List
sesuai dengan antarmuka Java bernamaCollection
Secara konseptual, kami biasanya merujuk pada pengelompokan yang tidak berurutan yang memungkinkan duplikat sebagai suatu Tas dan tidak mengizinkan duplikat sebagai Perangkat.
Daftar
Set
List
s umumnya memungkinkan objek duplikat.
List
s harus dipesan, dan karenanya dapat diakses dengan indeks.
Kelas implementasi meliputi: ArrayList
, LinkedList
,Vector
Set
s melakukan tidak mengizinkan objek duplikat. Sebagian besar implementasi tidak teratur, tetapi implementasi khusus.
Kelas implementasi meliputi:
HashSet
(tidak berurutan),
LinkedHashSet
(dipesan),
TreeSet
(dipesan berdasarkan pesanan alami atau oleh pembanding yang disediakan)
Ketika kita berbicara tentang antarmuka Java, mengapa tidak melihat Javadoc ?!
List
adalah koleksi yang diurutkan (berurutan), yang biasanya memungkinkan duplikatSet
adalah koleksi yang tidak mengandung elemen duplikat, urutan iterasi dapat dijamin oleh implementasiTidak ada disebutkan tentang kurangnya ketertiban tentang perangkat: itu tergantung pada implementasi.
LinkedHashSet
di sisi kiri jika kode bergantung pada pemesanan nanti. Saya hanya menggunakan Set
jika saya benar-benar menggunakannya seperti itu, karena Anda tidak dapat berasumsi bahwa implementasi yang mendasarinya adalah LinkedHashSet
seperti itu, mungkin hari ini, tetapi besok kode berubah dan akan gagal.
Ini mungkin bukan jawaban yang Anda cari, tetapi JavaDoc dari kelas koleksi sebenarnya cukup deskriptif. Salin / tempel:
Koleksi yang dipesan (juga dikenal sebagai urutan). Pengguna antarmuka ini memiliki kontrol yang akurat atas di mana dalam daftar setiap elemen dimasukkan. Pengguna dapat mengakses elemen dengan indeks integer mereka (posisi dalam daftar), dan mencari elemen dalam daftar.
Tidak seperti set, daftar biasanya memungkinkan elemen duplikat. Secara lebih formal, daftar biasanya memungkinkan pasangan elemen e1 dan e2 sedemikian rupa sehingga e1.equals (e2), dan mereka biasanya memungkinkan beberapa elemen null jika memungkinkan elemen nol sama sekali. Tidak dapat dibayangkan bahwa seseorang mungkin ingin menerapkan daftar yang melarang duplikat, dengan melemparkan pengecualian runtime ketika pengguna mencoba memasukkannya, tetapi kami berharap penggunaan ini jarang terjadi.
Satu set adalah kelompok objek yang tidak berurutan - tidak ada objek duplikat yang diizinkan. Biasanya diimplementasikan menggunakan kode hash dari objek yang dimasukkan. (Implementasi spesifik dapat menambahkan pemesanan, tetapi antarmuka Set sendiri tidak.)
Daftar adalah sekelompok objek yang diurutkan yang mungkin berisi duplikat. Hal ini dapat dilaksanakan dengan ArrayList
, LinkedList
, dll
List
tidak dipesan 😕
Daftar:
Daftar memungkinkan elemen duplikat dan nilai nol. Mudah mencari menggunakan indeks elemen yang sesuai dan juga akan menampilkan elemen dalam urutan penyisipan. Contoh: (daftar tertaut)
import java.util.*;
public class ListExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> l=new LinkedList<Integer>();
l.add(001);
l.add(555);
l.add(333);
l.add(888);
l.add(555);
l.add(null);
l.add(null);
Iterator<Integer> il=l.iterator();
System.out.println(l.get(0));
while(il.hasNext()){
System.out.println(il.next());
}
for(Integer str : l){
System.out.println("Value:"+str);
}
}
}
Keluaran:
1
1
555
333
888
555
null
null
Nilai: 1
Nilai: 555
Nilai: 333
Nilai: 888
Nilai: 555
Nilai: nol
Nilai: nol
Set:
Set tidak membolehkan elemen duplikat dan itu memungkinkan nilai nol tunggal. Ini tidak akan mempertahankan urutan untuk menampilkan elemen. HanyaTreeSet
akan ditampilkan dalam urutan naik.
Contoh: (TreeSet)
import java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<String> set = new TreeSet<String>();
try {
set.add("hello");
set.add("world");
set.add("welcome");
set.add("all");
for (String num : set) {
System.out.println( num);
}
set.add(null);
} catch (NullPointerException e) {
System.out.println(e);
System.out.println("Set doesn't allow null value and duplicate value");
}
}
}
Keluaran:
semua
hello
welcome
world
java.lang.NullPointerException
Set tidak mengizinkan nilai nol dan nilai duplikat
1.List memungkinkan nilai duplikat dan mengatur tidak mengizinkan duplikat
2.List mempertahankan urutan di mana Anda memasukkan elemen ke dalam daftar Set tidak akan mempertahankan pesanan. 3.List adalah urutan elemen yang terurut sedangkan Set adalah daftar elemen yang tidak berurutan.
Daftar Vs Set
1) Set tidak memungkinkan duplikat. Daftar memungkinkan duplikat. Berdasarkan implementasi Set, Ia juga mempertahankan Order penyisipan.
misalnya: LinkedHashSet
. Itu mempertahankan urutan penyisipan. Silakan lihat klik di sini
2) berisi metode. Dengan sifat dari Set itu akan memberikan kinerja yang lebih baik untuk diakses. Kasus terbaiknya adalah o (1). Tetapi List memiliki masalah kinerja untuk dipanggil contains
.
Semua List
kelas mempertahankan urutan penyisipan. Mereka menggunakan implementasi yang berbeda berdasarkan kinerja dan karakteristik lainnya (misalnya ArrayList
untuk kecepatan akses indeks tertentu, LinkedList
hanya untuk menjaga ketertiban). Karena tidak ada kunci, duplikat diperbolehkan.
The Set
kelas tidak menjaga ketertiban penyisipan. Mereka secara opsional dapat memaksakan urutan tertentu (seperti dengan SortedSet
), tetapi biasanya memiliki urutan yang ditentukan implementasi berdasarkan pada beberapa fungsi hash (seperti dengan HashSet
). Karena Set
s diakses dengan kunci, duplikat tidak diperbolehkan.
Memesan ... daftar memiliki pesanan, satu set tidak.
Beberapa perbedaan yang layak dicatat antara List dan Set di Java diberikan sebagai berikut:
1) Perbedaan mendasar antara List dan Set di Java adalah memungkinkan elemen duplikat. Daftar di Java memungkinkan duplikat sementara Set tidak mengizinkan duplikat apa pun. Jika Anda memasukkan duplikat di Atur itu akan menggantikan nilai yang lebih lama. Setiap implementasi Set in Java hanya akan mengandung elemen unik.
2) Perbedaan signifikan lainnya antara Daftar dan Set di Jawa adalah urutan. Daftar adalah Koleksi yang Dipesan, sedangkan Set adalah Koleksi yang tidak dipesan. Daftar mempertahankan urutan penyisipan elemen, berarti setiap elemen yang dimasukkan sebelumnya akan memiliki indeks yang lebih rendah daripada elemen yang dimasukkan setelahnya. Diatur di Jawa tidak mempertahankan urutan apa pun. Meskipun Set menyediakan alternatif lain yang disebut SortedSet yang dapat menyimpan elemen Set dalam urutan penyortiran tertentu yang ditentukan oleh metode Comparable dan Comparator dari Objects yang disimpan di Set.
3) Implementasi populer antarmuka Daftar di Jawa termasuk ArrayList, Vector dan LinkedList. Sementara implementasi antarmuka Set yang populer termasuk HashSet, TreeSet dan LinkedHashSet.
Cukup jelas bahwa jika Anda perlu mempertahankan urutan penyisipan atau objek dan koleksi Anda dapat berisi duplikat daripada Daftar adalah cara untuk pergi. Di sisi lain, jika kebutuhan Anda adalah untuk mempertahankan koleksi unik tanpa duplikat daripada Set adalah cara untuk pergi.
Daftar:
Set:
Set<E>
dan List<E>
keduanya digunakan untuk menyimpan elemen tipe E
. Perbedaannya adalah bahwa Set
disimpan dalam cara yang tidak teratur dan tidak memungkinkan nilai duplikat. List
digunakan untuk menyimpan elemen dengan cara yang terurut dan memungkinkan nilai duplikat.
Set
elemen tidak dapat diakses oleh posisi indeks, dan List
elemen dapat diakses dengan posisi indeks.
Hai Begitu banyak jawaban yang sudah diberikan .. Mari saya tunjukkan beberapa poin yang tidak disebutkan sejauh ini:
RandomAccess
antarmuka yang merupakan antarmuka penanda untuk akses yang lebih cepat. Tidak ada implementasi Set yang melakukan itu.ListIterator
yang mendukung iterasi di kedua arah . Set menggunakan Iterator yang hanya mendukung iterasi 1 arahPerbedaan terbesar adalah konsep dasarnya.
Dari antarmuka Set and List . Set adalah konsep matematika. Setel metode, perpanjang koleksi. Namun, jangan menambahkan metode baru. size () berarti kardinalitas (lebih banyak adalah BitSet.cardinality, penghitung Linear , Log Log, HyperLogLog ). addAll () berarti penyatuan. retainAll () berarti persimpangan. removeAll () berarti perbedaan.
Namun Daftar kekurangan konsep-konsep ini. Daftar menambahkan banyak metode untuk mendukung konsep urutan yang tidak disediakan antarmuka Koleksi . konsep inti adalah INDEX . seperti menambahkan (indeks, elemen), dapatkan (indeks), pencarian (indexOf ()), hapus elemen (indeks). Daftar juga menyediakan subList " Tampilan Koleksi " . Set tidak memiliki tampilan. tidak memiliki akses posisional. Daftar juga menyediakan banyak algoritma di kelas Koleksi . sortir (Daftar), pencarian biner (Daftar), mundur (Daftar), acak (Daftar), isi (Daftar). params metode adalah Daftar antarmuka. elemen duplikat hanyalah hasil dari konsep. bukan perbedaan esensial.
Jadi perbedaan mendasar adalah konsep. Set adalah konsep himpunan matematika. Daftar adalah konsep urutan.
Berikut adalah contoh yang jelas dengan asyik. saya membuat satu set dan daftar. maka saya mencoba untuk menyimpan 20 nilai yang dihasilkan secara acak dalam setiap daftar. nilai yang dihasilkan bisa dalam kisaran 0 hingga 5
s = [] as Set
l = []
max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}
println "\n"
println "Set : $s "
println "list : $l
Hasil :
angka acak: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Setel: [4, 1, 0, 2, 3]
daftar: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Anda dapat melihat bahwa perbedaannya adalah:
Set: Set tidak dapat memiliki elemen Gandakan dalam koleksi. itu juga koleksi yang tidak terurut. Untuk mengakses data dari Set, diperlukan untuk menggunakan Iterator saja dan pengambilan berbasis indeks tidak dimungkinkan untuk itu. Ini terutama digunakan setiap kali diperlukan koleksi keunikan.
Daftar: Daftar dapat memiliki elemen duplikat, dengan urutan alami saat dimasukkan. Dengan demikian, dapat diambil data berdasarkan indeks atau iterator. Ini banyak digunakan untuk menyimpan koleksi yang perlu diakses berdasarkan indeks.
Nama TOPIK: Daftar VS Set
Saya baru saja membahas topik terpenting Jawa yang disebut Collections Framework. Saya pikir untuk membagikan sedikit pengetahuan saya tentang Koleksi dengan Anda. Daftar, Atur, Peta adalah topik terpenting. Jadi mari kita mulai dengan List dan Set.
Perbedaan antara Daftar dan Set:
Daftar adalah kelas koleksi yang memperluas AbstractList
kelas sedangkan Set adalah kelas koleksi yang memperluas AbstractSet
kelas tetapi keduanya mengimplementasikan antarmuka Koleksi.
Daftar antarmuka memungkinkan nilai duplikat (elemen) sedangkan Atur antarmuka tidak memungkinkan nilai duplikat. Dalam hal elemen duplikat di Set, itu menggantikan nilai yang lebih lama.
Daftar antarmuka memungkinkan nilai NULL sedangkan Set antarmuka tidak memungkinkan nilai Null. Dalam hal menggunakan nilai Null di Set itu memberi NullPointerException
.
Antarmuka daftar mempertahankan urutan penyisipan. Itu berarti cara kita menambahkan elemen dalam Daftar dengan cara yang sama kita mendapatkannya menggunakan iterator atau untuk-masing-masing gaya. Sedangkan Set
implementasi tidak selalu mempertahankan urutan penyisipan. (Meskipun SortedSet
tidak menggunakan TreeSet
, dan LinkedHashSet
mempertahankan urutan penyisipan).
Daftar antarmuka memiliki metode sendiri yang ditentukan sedangkan Set antarmuka tidak memiliki metode sendiri sehingga Set menggunakan metode antarmuka Koleksi saja.
Daftar antarmuka memiliki satu kelas lama yang disebut Vector
sedangkan Set antarmuka tidak memiliki kelas lama
Last but not least ... listIterator()
Metode ini hanya dapat digunakan untuk menggilir elemen-elemen dalam Daftar Kelas sedangkan kita dapat menggunakan metode iterator () untuk mengakses Setel elemen kelas
Ada lagi yang bisa kita tambahkan? Tolong beritahu saya.
Terima kasih.
List
dan Set
merupakan antarmuka yang juga memiliki implementasi "basis" dalam bentuk kelas abstrak (yang Anda sebutkan). Selain itu, # 3 sepenuhnya tidak akurat , karena sebagian besar set memungkinkan nilai nol (tetapi tergantung pada implementasi). Saya tidak mengerti # 5 dan # 7, dan untuk # 6 Vector
bukan warisan, tetapi hanya disinkronkan dan tidak disukai untuk digunakan kecuali ketika sinkronisasi diperlukan.
Set:
Tidak dapat memiliki nilai duplikat Pemesanan tergantung pada implementasi. Secara default tidak dipesan Tidak dapat mengakses menurut indeks
Daftar:
Dapat memiliki nilai duplikat Dipesan secara default Dapat memiliki akses berdasarkan indeks