Apa perbedaan antara koleksi yang dipesan dan yang diurutkan?


132

Apakah ada perbedaan antara koleksi yang diurutkan dan yang dipesan ?


1
Jangan mengambil jawaban di sini terlalu harfiah. Sementara itu adalah jenis definisi yang banyak dipahami & diakui, itu bukan definisi de facto dalam terminologi komputer. Misalnya, dalam. NET antarmuka untuk "diurutkan" yang dapat dihitung disebut IOrderedEnumerable (lucunya tidak terlalu konsisten dalam. NET. "Urutan penyisipan" hormat dalam kamus di. NET disebut OrderedDictionaryyang oleh beberapa orang dianggap keliru dibandingkan dengan mengatakan, IndexedDictionary) . Ya di dunia java (sebagian besar di tempat lain juga) yang mereka maksud adalah jawaban Anda. Untuk lebih lanjut lihat di sini .
nawfal

Jika beberapa contoh implementasi salah penamaan, itu bukan alasan untuk menyebarkan kesalahannya. Itu pertanyaan yang bagus, dengan jawaban yang bagus. Gunakan penamaan yang tepat - membantu mengurangi kebingungan bagi semua orang, termasuk Anda sendiri.
foo

Jawaban:


166

Sebuah memerintahkan pengumpulan berarti bahwa unsur-unsur dari koleksi memiliki urutan tertentu. Pesanan tidak tergantung pada nilai. Sebuah Daftar adalah contoh.

Sebuah diurutkan koleksi berarti bahwa tidak hanya koleksi memiliki pesanan, tapi pesanan tergantung pada nilai dari elemen. Sebuah SortedSet adalah contoh.

Sebaliknya, koleksi tanpa urutan apa pun dapat mempertahankan elemen dalam urutan apa pun. Sebuah Set adalah contoh.


1
Apakah Prioritas mengantri koleksi yang dipesan?
pertukaran berlebihan

@overexchange Mengingat definisi di atas, antrian prioritas akan menjadi kumpulan yang diurutkan dalam kebanyakan kasus, karena prioritas hampir selalu didefinisikan sebagai properti elemen dalam antrian.
cdeszaq

Jika SortedSet telah diwarisi dari Set dan memiliki hubungan is-a dengannya maka bagaimana Anda dapat mengatakan Set adalah tanpa urutan apa pun
xpioneer

79

Koleksi yang dipesan mempertahankan urutan elemen berdasarkan urutan Anda memasukkan / menghapusnya dari koleksi.

Koleksi yang diurutkan menjaga elemen diurutkan berdasarkan kriteria sortir.


18

Java menggunakan "koleksi yang dipesan" untuk berarti koleksi seperti Daftar, di mana (tidak seperti HashSet), koleksi tersebut mengingat urutan elemen apa yang seharusnya dimasukkan. Jadi elemen dapat ditambahkan ke koleksi di "tempat" tertentu dalam urutan .

Java menggunakan "koleksi yang disortir" untuk berarti koleksi seperti SortedSet, di mana (tidak seperti Daftar), urutan iterator yang melintasi koleksi sesuai dengan pembanding yang ditentukan atau urutan alami elemen.

Jadi perbedaannya adalah apakah pemesanan tergantung pada nilai-nilai ("diurutkan"), atau merupakan properti yang unsur-unsur miliki secara independen dari nilainya ("dipesan").


1
Jawaban yang bagus dan +1 untuk menyebutkan "Java". Ini agak definisi yang diterima di sebagian besar tempat juga, seperti OrderedDictdi python. Tetapi dalam. NET antarmuka untuk "diurutkan" enumerable disebut IOrderedEnumerable. Jadi itu tergantung. Hanya mengatakan ..
nawfal

9

Ya, meskipun konsepnya mirip.

List adalah koleksi berurutan: setiap elemen memiliki indeks, yang membentuk urutan elemen, tetapi biasanya tidak terkait dengan properti elemen itu sendiri.

SortedMapdan SortedSetdiurutkan koleksi, yang berarti bahwa iterasi melalui koleksi akan terjadi dalam urutan yang berasal dari elemen itu sendiri. Sebagai contoh, jika Anda memiliki sebuah SortedSet<String>maka Strings akan diurutkan sesuai dengan urutan pengurutan leksikografis.

Koleksi yang dipesan dapat diurutkan tetapi tidak harus (misalnya setelah menggunakan Collections.sort()) ketika pemesanan eksternal identik dengan urutan sortir elemen. Koleksi yang diurutkan selalu dipesan secara tersirat (yaitu selalu ada elemen "pertama", dan itu selalu sama selama Anda tidak menambahkan yang lain, yang lebih kecil).


5

Koleksi yang dipesan adalah koleksi yang melacak indeks berurutan yang memasukkan setiap elemen.

Koleksi yang diurutkan adalah koleksi yang dipesan ketika pesanan juga tergantung pada nilai elemen yang akan dimasukkan, selama penggunaan antarmuka Sebanding yang menyediakan Anda dengan metode untuk menentukan kriteria penyortiran.

Saya harap ini bisa membantu.


2

Diurutkan akan menyiratkan pemesanan sesuai dengan implementasi Sebanding atau Pembanding. Memerintahkan akan menyiratkan bahwa itu mengikuti urutan penyisipan atau definisi urutan lain yang konsisten dan didefinisikan, tetapi sebaliknya sewenang-wenang.

Jadi daftar string yang diurutkan akan diurutkan sesuai dengan metode String.compareTo. Daftar mungkin berisi daftar string yang dimasukkan dalam urutan acak, tetapi urutan itu akan selalu tetap sama.

Tentu saja ada metode di kelas Koleksi untuk mengurutkan daftar.


1

Koleksi yang diurutkan biasanya berarti elemen diurutkan dari nilai minimun ke nilai maxinum atau sebaliknya tergantung pada atribut elemen yang digunakan algoritma.

untuk koleksi interger, yang diurutkan mungkin dari jumlah minimum hingga jumlah maksimum untuk koleksi orang, mungkin akan tergerus oleh ketinggian orang atau berat orang, dll.

Ketika berbicara tentang ketertiban, biasanya berarti urutan penyisipan. Pesanan dapat diubah setelah penyortiran


0

Koleksi yang Diurutkan vs Koleksi yang Dipesan

1. Koleksi yang disortir

Koleksi yang disortir adalah menyortir koleksi dengan memanfaatkan fitur penyortiran yang disediakan oleh kerangka kerja koleksi Java. Penyortiran terjadi dalam memori JVM yang menjalankan Hibernate, setelah data dibaca dari database menggunakan komparator java.

Jika koleksi Anda tidak besar, ini akan menjadi cara yang lebih efisien untuk mengurutkannya. Seperti yang terjadi dalam memori jvm, itu dapat membuang kesalahan Memori.

2. Koleksi pesanan

Koleksi pesanan menyortir koleksi dengan menentukan klausa urutan demi permintaan dalam permintaan untuk menyortir koleksi ini saat pengambilan. Jika koleksi Anda sangat besar, ini akan menjadi cara yang lebih efisien untuk mengurutkannya. Ini lebih cepat dibandingkan dengan koleksi yang diurutkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.