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.
Untuk SortedSet, tidak ada dua elemen di mana compareTo () == 0, sama dengan tidak dipanggil.
Peter Lawrey
34
Seperangkat DAPAT dipesan, sehingga pernyataan pertama dari jawaban ini menyesatkan, walaupun tentu saja Daftar harus dipilih untuk menegakkan pesanan Koleksi
Samuel EUSTACHI
24
SALAH! Satu set Java dapat dipesan, tergantung pada implementasinya; misalnya, Java TreeSet dipesan. Dalam konteks Java, satu-satunya perbedaan antara Daftar dan Set adalah bahwa Set berisi item unik. Dalam konteks matematika, item dari himpunan unik dan tidak teratur.
stackoverflowuser2010
44
Ya, Java Set CAN be TAPI tidak TERLALU diperintahkan. Ya, jika Anda memiliki TreeSet, Anda dapat mengandalkan itu dipesan. Tetapi Anda harus TAHU bahwa Anda memiliki TreeSet dan bukan hanya Set. Jika Anda mengembalikan Set, Anda tidak dapat bergantung pada yang dipesan. Daftar di sisi lain diurutkan berdasarkan sifatnya dan setiap implementasi Daftar harus dipesan. Jadi, dalam hal definisi antarmuka, tidak terlalu salah untuk mengatakan bahwa Set adalah unordered, tapi mungkin sedikit lebih teknis benar untuk mengatakan bahwa Set tidak memberikan jaminan urutan elemen.
Spiggy Quigman
14
Jangan mengacaukan "dipesan" dengan "diurutkan." Demikian juga, jangan mengacaukan kontrak antarmuka dan implementasi antarmuka. Juga salah untuk mengatakan bahwa sesuatu yang "tidak berurutan" tidak memiliki pesanan, itu berarti tidak ada jaminan tentang pelaksanaan pesanan (dan bahwa pesanan mungkin tidak stabil antara panggilan, tidak seperti dengan daftar yang dipesan).
lilbyrdie
223
╔═══════════════════╦══════════════════════╦═════════════════════════════╗║║List║Set║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║Duplicates║ YES ║ NO ║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║Order║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║PositionalAccess║ YES ║ NO ║╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Satu hal yang perlu diperhatikan: kinerja akses posisi sangat tergantung pada implementasi yang mendasarinya, susunan vs daftar tertaut stackoverflow.com/questions/322715/…
Christophe Roussy
1
Bagaimana set diindeks jika tidak oleh akses posisional? (+1 untuk tabel ASCII)
tplive
72
Daftar elemen yang dipesan (unik atau tidak) Sesuai dengan antarmuka Java bernamaList
Dapat diakses oleh indeks
diimplemetasikan menggunakan
LinkedList
ArrayList
Daftar elemen yang unik: Sesuai dengan antarmuka Java bernamaSet
Bisa tidak diakses oleh indeks
diimplemetasikan menggunakan
HashSet (tidak berurutan)
LinkedHashSet (dipesan)
TreeSet (diurutkan berdasarkan pesanan alami atau oleh pembanding yang disediakan)
Keduanya antarmuka Setdan Listsesuai dengan antarmuka Java bernamaCollection
Set adalah pengelompokan item tanpa urutan tanpa duplikat diizinkan (biasanya)
Secara konseptual, kami biasanya merujuk pada pengelompokan yang tidak berurutan yang memungkinkan duplikat sebagai suatu Tas dan tidak mengizinkan duplikat sebagai Perangkat.
Beberapa set implementasi diperintahkan (seperti LinkedHashSet, yang memelihara LinkedList di belakang layar). Tetapi Set ADT tidak memiliki pemesanan.
Michael Myers
10
Daftar
Merupakan pengelompokan elemen berurutan.
Daftar digunakan untuk mengumpulkan elemen dengan duplikat.
Metode baru didefinisikan di dalam antarmuka Daftar.
Set
Merupakan pengelompokan elemen yang tidak teratur.
Set digunakan untuk kumpulan elemen tanpa duplikat.
Tidak ada metode baru yang didefinisikan di dalam Set interface, jadi kita harus menggunakan metode Collection interface hanya dengan Set subclass.
Lists umumnya memungkinkan objek duplikat.
Lists harus dipesan, dan karenanya dapat diakses dengan indeks.
Kelas implementasi meliputi: ArrayList, LinkedList,Vector
Set:
Sets 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)
Benar. LinkedHashSet berisi elemen dalam urutan penyisipan.
ggb667
Ini antarmuka, SEMUA tergantung pada implementasinya. List.get () dapat membuat file yang berisi 5 desimal pertama pi dan melempar StackOverFlowException dalam beberapa implementasi, ini tidak menyiratkan bahwa Anda dapat mengatakan "Daftar adalah sesuatu yang dapat membuat file", karena itu bukan bagian dari kontrak yang ditentukan oleh antarmuka. Set klaim docs dimodelkan setelah konsep matematika dari set, yang menurut definisi tidak dipesan. Diberikan satu set dalam kode Anda, Anda tidak dapat menganggap itu dipesan tanpa melanggar prinsip SOLID.
sara
@ Kai, saya biasanya tetap LinkedHashSetdi sisi kiri jika kode bergantung pada pemesanan nanti. Saya hanya menggunakan Setjika saya benar-benar menggunakannya seperti itu, karena Anda tidak dapat berasumsi bahwa implementasi yang mendasarinya adalah LinkedHashSetseperti itu, mungkin hari ini, tetapi besok kode berubah dan akan gagal.
Christophe Roussy
Jika Anda mendeklarasikan LinkedHashSet Anda tidak berurusan dengan Set, jadi membuat klaim tentang bagaimana Sets seharusnya berperilaku hampir tidak relevan. Saya akan mengatakan keteraturan (mungkin) untuk set berdasarkan beberapa implementasi mirip dengan mengatakan "Instance of Runnable memiliki metode run dimaksudkan untuk dijalankan pada beberapa utas. Juga mereka membuka koneksi DB dan membaca data pelanggan tergantung pada implementasinya. " Tentu saja beberapa implementasi dapat melakukan itu, tetapi bukan itu yang tersirat oleh Runnable Interface.
sara
5
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
Saya bingung 😕! Apa yang diperintahkan / tidak dipesan dalam konteks ini? Apakah ini terkait dengan urutan naik dan turun? Jika demikian, Listtidak dipesan 😕
malhobayyeb
4
Diurutkan adalah ketika data input diatur persis seperti yang diinput oleh pengguna sedangkan Diurutkan adalah ketika data input diurutkan secara leksikografis atau urutan naik / turun (dalam hal nilai integer). Tidak berurutan berarti bahwa data input mungkin atau mungkin tidak disimpan dalam urutan yang dimasukkan pengguna.
Akhil
5
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)
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;publicclassSetExample{publicstaticvoid main(String[] args){// TODO Auto-generated method stubTreeSet<String> set =newTreeSet<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.
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 Listkelas mempertahankan urutan penyisipan. Mereka menggunakan implementasi yang berbeda berdasarkan kinerja dan karakteristik lainnya (misalnya ArrayListuntuk kecepatan akses indeks tertentu, LinkedListhanya untuk menjaga ketertiban). Karena tidak ada kunci, duplikat diperbolehkan.
The Setkelas 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 Sets diakses dengan kunci, duplikat tidak diperbolehkan.
Peta menyimpan objek dengan kunci, tetapi menetapkan objek menyimpan menggunakan nilai unik yang terkait dengan objek, biasanya kode hash-nya. (Peta juga dapat menggunakan kode hash untuk memeriksa keunikan kunci, tetapi mereka tidak diharuskan.)
Quinn Taylor
1
Memesan ... daftar memiliki pesanan, satu set tidak.
Set ADT tidak menentukan urutan, tetapi beberapa implementasi Set (seperti LinkedHashSet) menjaga urutan penyisipan.
Michael Myers
3
Namun, perbedaan yang lebih penting adalah set tidak memungkinkan duplikat. Tas / multiset tidak.
Quinn Taylor
TreeSet telah memesan.
stackoverflowuser2010
1
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.
Set<E>dan List<E>keduanya digunakan untuk menyimpan elemen tipe E. Perbedaannya adalah bahwa Setdisimpan dalam cara yang tidak teratur dan tidak memungkinkan nilai duplikat. Listdigunakan untuk menyimpan elemen dengan cara yang terurut dan memungkinkan nilai duplikat.
Setelemen tidak dapat diakses oleh posisi indeks, dan Listelemen dapat diakses dengan posisi indeks.
@BalusC tolong jangan berkomentar tanpa melihat tanggal posting. Lihat pos layak pada saat itu.
Yash
0
Hai Begitu banyak jawaban yang sudah diberikan .. Mari saya tunjukkan beberapa poin yang tidak disebutkan sejauh ini:
Sebagian besar implementasi Daftar (ArrayList, Vector) mengimplementasikanRandomAccess antarmuka yang merupakan antarmuka penanda untuk akses yang lebih cepat. Tidak ada implementasi Set yang melakukan itu.
Daftar menggunakan satu Iterator khusus yang disebut ListIteratoryang mendukung iterasi di kedua arah . Set menggunakan Iterator yang hanya mendukung iterasi 1 arah
HashSet membutuhkan memori 5,5 kali lebih banyak daripada ArrayList untuk menyimpan jumlah elemen yang sama.
@smurti ini agak terlambat, dan saya tidak yakin apakah Anda telah mencatat, tetapi poin pertama Anda bertentangan dengan dirinya sendiri: "Sebagian besar implementasi Daftar (ArrayList, Vektor) menerapkan RandomAccess ..." dan "... Tidak ada Daftar implementasi melakukan itu "
Peter M
0
Perbedaan 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
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.
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 AbstractListkelas sedangkan Set adalah kelas koleksi yang memperluas AbstractSetkelas 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 Setimplementasi tidak selalu mempertahankan urutan penyisipan. (Meskipun SortedSettidak menggunakan TreeSet, dan LinkedHashSetmempertahankan 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 Vectorsedangkan 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.
Pertama, Listdan Setmerupakan 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 Vectorbukan warisan, tetapi hanya disinkronkan dan tidak disukai untuk digunakan kecuali ketika sinkronisasi diperlukan.
glen3b
-3
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
Jawaban:
List
adalah urutanSet
elemen yang terurut sedangkan daftar elemen berbeda yang tidak terurut (terima kasih, Quinn Taylor ).List<E>:
Set<E>:
sumber
sumber
Daftar elemen yang dipesan (unik atau tidak)
Sesuai dengan antarmuka Java bernama
List
Dapat diakses oleh indeks
diimplemetasikan menggunakan
Daftar elemen yang unik:
Sesuai dengan antarmuka Java bernama
Set
Bisa tidak diakses oleh indeks
diimplemetasikan menggunakan
Keduanya antarmuka
Set
danList
sesuai dengan antarmuka Java bernamaCollection
sumber
Set tidak dapat berisi elemen duplikat sementara Daftar bisa. Daftar (di Jawa) juga menyiratkan pesanan.
sumber
Secara konseptual, kami biasanya merujuk pada pengelompokan yang tidak berurutan yang memungkinkan duplikat sebagai suatu Tas dan tidak mengizinkan duplikat sebagai Perangkat.
sumber
Daftar
Set
sumber
Daftar:
List
s umumnya memungkinkan objek duplikat.List
s harus dipesan, dan karenanya dapat diakses dengan indeks.Kelas implementasi meliputi:
ArrayList
,LinkedList
,Vector
Set:
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)sumber
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.
sumber
LinkedHashSet
di sisi kiri jika kode bergantung pada pemesanan nanti. Saya hanya menggunakanSet
jika saya benar-benar menggunakannya seperti itu, karena Anda tidak dapat berasumsi bahwa implementasi yang mendasarinya adalahLinkedHashSet
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:
sumber
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
, dllsumber
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)
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. Hanya
TreeSet
akan ditampilkan dalam urutan naik.Contoh: (TreeSet)
Keluaran:
semua
hello
welcome
world
java.lang.NullPointerException
Set tidak mengizinkan nilai nol dan nilai duplikat
sumber
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.
sumber
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 sini2) 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
.sumber
Semua
List
kelas mempertahankan urutan penyisipan. Mereka menggunakan implementasi yang berbeda berdasarkan kinerja dan karakteristik lainnya (misalnyaArrayList
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 denganSortedSet
), tetapi biasanya memiliki urutan yang ditentukan implementasi berdasarkan pada beberapa fungsi hash (seperti denganHashSet
). KarenaSet
s diakses dengan kunci, duplikat tidak diperbolehkan.sumber
Memesan ... daftar memiliki pesanan, satu set tidak.
sumber
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.
sumber
Daftar:
Set:
sumber
Set<E>
danList<E>
keduanya digunakan untuk menyimpan elemen tipeE
. Perbedaannya adalah bahwaSet
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, danList
elemen dapat diakses dengan posisi indeks.sumber
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 arahsumber
Perbedaan 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.
sumber
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
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:
sumber
Sukai jawabannya karena SET tidak memiliki nilai rangkap dan Daftar dapat. Tentu saja, ketertiban adalah satu hal lagi yang membedakan mereka.
sumber
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.
sumber
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 memperluasAbstractSet
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. (MeskipunSortedSet
tidak menggunakanTreeSet
, danLinkedHashSet
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 lamaLast 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 kelasAda lagi yang bisa kita tambahkan? Tolong beritahu saya.
Terima kasih.
sumber
List
danSet
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 # 6Vector
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
sumber