Bagikan melalui


ICollection Antarmuka

Definisi

Antarmuka akar dalam hierarki koleksi.

[Android.Runtime.Register("java/util/Collection", "", "Java.Util.ICollectionInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public interface ICollection : IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IIterable
[<Android.Runtime.Register("java/util/Collection", "", "Java.Util.ICollectionInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
type ICollection = interface
    interface IIterable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Turunan
Atribut
Penerapan

Keterangan

Antarmuka akar dalam hierarki koleksi. Koleksi mewakili sekelompok objek, yang dikenal sebagai elemennya. Beberapa koleksi memungkinkan elemen duplikat dan yang lain tidak. Beberapa dipesan dan yang lain tidak diurutkan. JDK tidak menyediakan implementasi langsung antarmuka ini: ini menyediakan implementasi subinterfaces yang lebih spesifik seperti Set dan List. Antarmuka ini biasanya digunakan untuk meneruskan koleksi dan memanipulasinya di mana generalitas maksimum diinginkan.

Tas atau multiset (koleksi tidak berurutan yang mungkin berisi elemen duplikat) harus mengimplementasikan antarmuka ini secara langsung.

Semua kelas implementasi tujuan Collection umum (yang biasanya diterapkan Collection secara tidak langsung melalui salah satu subinterface-nya) harus menyediakan dua konstruktor "standar": konstruktor yang batal (tanpa argumen), yang membuat koleksi kosong, dan konstruktor dengan argumen tunggal jenis Collection, yang membuat koleksi baru dengan elemen yang sama dengan argumennya. Akibatnya, konstruktor terakhir memungkinkan pengguna untuk menyalin koleksi apa pun, menghasilkan koleksi yang setara dari jenis implementasi yang diinginkan. Tidak ada cara untuk menerapkan konvensi ini (karena antarmuka tidak dapat berisi konstruktor) tetapi semua implementasi tujuan Collection umum di pustaka platform Java mematuhinya.

Metode tertentu ditentukan untuk bersifat opsional. Jika implementasi koleksi tidak menerapkan operasi tertentu, itu harus menentukan metode yang sesuai untuk melemparkan UnsupportedOperationException. Metode tersebut ditandai "operasi opsional" dalam spesifikasi metode antarmuka koleksi.

"pembatasan opsional">Beberapa implementasi koleksi memiliki batasan pada elemen yang mungkin dikandungnya. Misalnya, beberapa implementasi melarang elemen null, dan beberapa memiliki batasan pada jenis elemennya. Mencoba menambahkan elemen yang tidak memenuhi syarat melemparkan pengecualian yang tidak dicentang, biasanya NullPointerException atau ClassCastException. Mencoba mengkueri keberadaan elemen yang tidak memenuhi syarat dapat melemparkan pengecualian, atau mungkin hanya mengembalikan false; beberapa implementasi akan menunjukkan perilaku sebelumnya dan beberapa akan menunjukkan yang terakhir. Lebih umum, mencoba operasi pada elemen yang tidak memenuhi syarat yang penyelesaiannya tidak akan mengakibatkan penyisipan elemen yang tidak memenuhi syarat ke dalam koleksi dapat melemparkan pengecualian atau mungkin berhasil, pada opsi implementasi. Pengecualian tersebut ditandai sebagai "opsional" dalam spesifikasi untuk antarmuka ini.

Terserah setiap koleksi untuk menentukan kebijakan sinkronisasinya sendiri. Dengan tidak adanya jaminan yang lebih kuat oleh implementasi, perilaku yang tidak ditentukan dapat mengakibatkan pemanggilan metode apa pun pada koleksi yang sedang dimutasi oleh utas lain; ini termasuk pemanggilan langsung, meneruskan koleksi ke metode yang mungkin melakukan pemanggilan, dan menggunakan iterator yang ada untuk memeriksa koleksi.

Banyak metode dalam antarmuka Collections Framework didefinisikan dalam hal Object#equals(Object) equals metode . Misalnya, spesifikasi untuk metode mengatakan #contains(Object) contains(Object o) : "mengembalikan true jika dan hanya jika koleksi ini berisi setidaknya satu elemen e skema itu (o==null ? e==null : o.equals(e))." Spesifikasi ini tidak boleh ditafsirkan untuk menyiratkan bahwa pemanggilan Collection.contains dengan argumen o non-null akan menyebabkan o.equals(e) dipanggil untuk elemen eapa pun . Implementasi bebas untuk menerapkan pengoptimalan di mana equals pemanggilan dihindari, misalnya, dengan terlebih dahulu membandingkan kode hash dari dua elemen. Object#hashCode()(Spesifikasi menjamin bahwa dua objek dengan kode hash yang tidak sama tidak boleh sama.) Lebih umum lagi, implementasi berbagai antarmuka Collections Framework bebas untuk memanfaatkan perilaku metode yang mendasar Object yang ditentukan di mana pun implementor menganggapnya sesuai.

Beberapa operasi pengumpulan yang melakukan traversal rekursif koleksi mungkin gagal dengan pengecualian untuk instans referensi mandiri di mana koleksi secara langsung atau tidak langsung berisi dirinya sendiri. Ini termasuk clone()metode , equals(), hashCode() dan toString() . Implementasi dapat secara opsional menangani skenario referensial mandiri, namun sebagian besar implementasi saat ini tidak melakukannya.

<h2>"view">View Collections</h2>

Sebagian besar koleksi mengelola penyimpanan untuk elemen yang dikandungnya. Sebaliknya, melihat koleksi itu sendiri tidak menyimpan elemen, tetapi sebaliknya mereka mengandalkan koleksi backing untuk menyimpan elemen aktual. Operasi yang tidak ditangani oleh koleksi tampilan itu sendiri didelegasikan ke koleksi backing. Contoh koleksi tampilan termasuk koleksi pembungkus yang dikembalikan oleh metode seperti Collections#checkedCollection Collections.checkedCollection, , Collections#synchronizedCollection Collections.synchronizedCollectiondan Collections#unmodifiableCollection Collections.unmodifiableCollection. Contoh koleksi tampilan lainnya termasuk koleksi yang memberikan representasi yang berbeda dari elemen yang sama, misalnya, seperti yang disediakan oleh List#subList List.subList, , NavigableSet#subSet NavigableSet.subSetatau Map#entrySet Map.entrySet. Setiap perubahan yang dilakukan pada koleksi pendukung terlihat dalam koleksi tampilan. Secara sesuai, setiap perubahan yang dilakukan pada koleksi tampilan — jika perubahan diizinkan — ditulis melalui ke koleksi backing. Meskipun secara teknis bukan koleksi, instans Iterator dan ListIterator juga dapat memungkinkan modifikasi ditulis ke koleksi backing, dan dalam beberapa kasus, modifikasi pada koleksi backing akan terlihat oleh Iterator selama iterasi.

<h2>"unmodifiable">Unmodifiable Collections</h2>

Metode tertentu dari antarmuka ini dianggap "merusak" dan disebut metode "mutator" di mana mereka memodifikasi grup objek yang terkandung dalam koleksi tempat mereka beroperasi. Mereka dapat ditentukan untuk melemparkan UnsupportedOperationException jika implementasi koleksi ini tidak mendukung operasi. Metode seperti itu harus (tetapi tidak diperlukan untuk) melempar jika UnsupportedOperationException pemanggilan tidak akan berpengaruh pada koleksi. Misalnya, pertimbangkan koleksi yang tidak mendukung #add add operasi. Apa yang akan terjadi jika #addAll addAll metode dipanggil pada koleksi ini, dengan koleksi kosong sebagai argumen? Penambahan elemen nol tidak berpengaruh, sehingga diizinkan untuk koleksi ini hanya untuk tidak melakukan apa-apa dan tidak melemparkan pengecualian. Namun, disarankan agar kasus seperti itu melempar pengecualian tanpa syarat, karena hanya melemparkan dalam kasus tertentu dapat menyebabkan kesalahan pemrograman.

Koleksi yang tidak dapat dimodifikasi adalah koleksi, semua yang metode mutatornya (seperti yang didefinisikan di atas) ditentukan untuk melemparkan UnsupportedOperationException. Koleksi seperti itu sehingga tidak dapat dimodifikasi dengan memanggil metode apa pun di atasnya. Agar koleksi tidak dapat dimodifikasi dengan benar, koleksi tampilan apa pun yang berasal darinya juga harus tidak dapat dimodifikasi. Misalnya, jika Daftar tidak dapat dimodifikasi, Daftar yang dikembalikan oleh List#subList List.subList juga tidak dapat dimodifikasi.

Koleksi yang tidak dapat dimodifikasi belum tentu tidak dapat diubah. Jika elemen yang terkandung dapat diubah, seluruh koleksi jelas dapat diubah, meskipun mungkin tidak dapat dimodifikasi. Misalnya, pertimbangkan dua daftar yang tidak dapat dimodifikasi yang berisi elemen yang dapat diubah. Hasil panggilan list1.equals(list2) mungkin berbeda dari satu panggilan ke panggilan berikutnya jika elemen telah dimutasi, meskipun kedua daftar tidak dapat dimodifikasi. Namun, jika koleksi yang tidak dapat dimodifikasi berisi semua elemen yang tidak dapat diubah, itu dapat dianggap tidak dapat diubah secara efektif.

<h2>"unmodview">Unmodifiable View Collections</h2>

Koleksi tampilan yang tidak dapat dimodifikasi adalah koleksi yang tidak dapat dimodifikasi dan itu juga merupakan tampilan ke koleksi backing. Metode mutatornya melemparkan UnsupportedOperationException, seperti yang dijelaskan di atas, saat membaca dan mengkueri metode didelegasikan ke koleksi backing. Efeknya adalah menyediakan akses baca-saja ke koleksi backing. Ini berguna bagi komponen untuk memberi pengguna akses baca ke koleksi internal, sambil mencegah mereka memodifikasi koleksi tersebut secara tidak terduga. Contoh koleksi tampilan yang tidak dapat dimodifikasi adalah yang dikembalikan oleh Collections#unmodifiableCollection Collections.unmodifiableCollectionmetode terkait , Collections#unmodifiableList Collections.unmodifiableList, dan .

Perhatikan bahwa perubahan pada koleksi pendukung mungkin masih dimungkinkan, dan jika terjadi, perubahan tersebut terlihat melalui tampilan yang tidak dapat dimodifikasi. Dengan demikian, koleksi tampilan yang tidak dapat dimodifikasi belum tentu tidak dapat diubah. Namun, jika koleksi backing dari tampilan yang tidak dapat dimodifikasi secara efektif tidak dapat diubah, atau jika satu-satunya referensi ke koleksi backing adalah melalui tampilan yang tidak dapat dimodifikasi, tampilan dapat dianggap tidak dapat diubah secara efektif.

<h2>"serializable">Serializability of Collections</h2>

Serialisasi koleksi bersifat opsional. Dengan demikian, tidak ada antarmuka koleksi yang dinyatakan untuk mengimplementasikan java.io.Serializable antarmuka. Namun, serialisasi dianggap sebagai umumnya berguna, sehingga sebagian besar implementasi koleksi dapat diserialisasikan.

Implementasi koleksi yang merupakan kelas publik (seperti ArrayList atau HashMap) dinyatakan untuk mengimplementasikan Serializable antarmuka jika sebenarnya dapat diserialisasikan. Beberapa implementasi koleksi bukan kelas publik, seperti koleksi yang tidak dapat dimodifikasi. Dalam kasus seperti itu, serialisasi koleksi tersebut dijelaskan dalam spesifikasi metode yang membuatnya, atau di beberapa tempat lain yang cocok. Dalam kasus di mana serialisasi koleksi tidak ditentukan, tidak ada jaminan tentang serialisasi koleksi tersebut. Secara khusus, banyak koleksi tampilan tidak dapat diserialisasikan.

Implementasi koleksi yang mengimplementasikan antarmuka tidak dapat dijamin dapat diserialisasikan Serializable . Alasannya adalah bahwa secara umum, koleksi berisi elemen dari jenis lain, dan tidak mungkin untuk menentukan secara statis apakah instans dari beberapa jenis elemen sebenarnya dapat diserialisasikan. Misalnya, pertimbangkan yang dapat diserialisasikan Collection<E>, di mana E tidak mengimplementasikan Serializable antarmuka. Koleksi mungkin dapat diserialisasikan, jika hanya berisi elemen dari beberapa subtipe yang dapat diserialisasikan dari E, atau jika kosong. Koleksi dengan demikian dikatakan dapat diserialisasikan secara kondisional, karena serialisasi koleksi secara keseluruhan tergantung pada apakah koleksi itu sendiri dapat diserialisasikan dan pada apakah semua elemen yang terkandung juga dapat diserialisasikan.

Kasus tambahan terjadi dengan instans SortedSet dan SortedMap. Koleksi ini dapat dibuat dengan Comparator yang memberlakukan pemesanan pada elemen yang ditetapkan atau kunci peta. Koleksi semacam itu hanya dapat diserialisasikan jika yang disediakan Comparator juga dapat diserialisasikan.

Antarmuka ini adalah anggota Java Collections Framework.

Ditambahkan dalam 1.2.

Dokumentasi Java untuk java.util.Collection.

Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.

Properti

Handle

Mendapatkan nilai JNI dari objek Android yang mendasar.

(Diperoleh dari IJavaObject)
IsEmpty

Mengembalikan jika ini Collection tidak berisi elemen.

JniIdentityHashCode

Mengembalikan nilai java.lang.System.identityHashCode() untuk instans yang dibungkus.

(Diperoleh dari IJavaPeerable)
JniManagedPeerState

Status serekan terkelola.

(Diperoleh dari IJavaPeerable)
JniPeerMembers

Akses anggota dan dukungan pemanggilan.

(Diperoleh dari IJavaPeerable)
PeerReference

Mengembalikan instans objek Java yang dibungkus JniObjectReference .

(Diperoleh dari IJavaPeerable)

Metode

Add(Object)

Memastikan bahwa koleksi ini berisi elemen yang ditentukan (operasi opsional).

AddAll(ICollection)

Menambahkan semua elemen dalam koleksi yang ditentukan ke koleksi ini (operasi opsional).

Clear()

Menghapus semua elemen dari koleksi ini (operasi opsional).

Contains(Object)

Mengembalikan true jika koleksi ini berisi elemen yang ditentukan.

ContainsAll(ICollection)

Mengembalikan true jika koleksi ini berisi semua elemen dalam koleksi yang ditentukan.

Disposed()

Dipanggil ketika instans telah dibuang.

(Diperoleh dari IJavaPeerable)
DisposeUnlessReferenced()

Jika tidak ada referensi yang luar biasa untuk instans ini, maka panggilan Dispose(); jika tidak, tidak melakukan apa pun.

(Diperoleh dari IJavaPeerable)
Equals(Object)

Membandingkan objek yang ditentukan dengan koleksi ini untuk kesetaraan.

Finalized()

Dipanggil ketika instans telah diselesaikan.

(Diperoleh dari IJavaPeerable)
ForEach(IConsumer)

Melakukan tindakan yang diberikan untuk setiap elemen Iterable hingga semua elemen telah diproses atau tindakan melemparkan pengecualian.

(Diperoleh dari IIterable)
GetHashCode()

Mengembalikan nilai kode hash untuk koleksi ini.

Iterator()

Mengembalikan iterator di atas elemen dalam koleksi ini.

Remove(Object)

Menghapus satu instans elemen yang ditentukan dari koleksi ini, jika ada (operasi opsional).

RemoveAll(ICollection)

Menghapus semua elemen koleksi ini yang juga terkandung dalam koleksi yang ditentukan (operasi opsional).

RemoveIf(IPredicate)

Menghapus semua elemen koleksi ini yang memenuhi predikat yang diberikan.

RetainAll(ICollection)

Hanya mempertahankan elemen dalam koleksi ini yang terkandung dalam koleksi yang ditentukan (operasi opsional).

SetJniIdentityHashCode(Int32)

Atur nilai yang dikembalikan oleh JniIdentityHashCode.

(Diperoleh dari IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Antarmuka akar dalam hierarki koleksi.

(Diperoleh dari IJavaPeerable)
SetPeerReference(JniObjectReference)

Atur nilai yang dikembalikan oleh PeerReference.

(Diperoleh dari IJavaPeerable)
Size()

Mengembalikan jumlah elemen dalam koleksi ini.

Spliterator()

Membuat lebih dari elemen yang Spliterator dijelaskan oleh ini Iterable.

(Diperoleh dari IIterable)
ToArray()

Mengembalikan array yang berisi semua elemen dalam koleksi ini.

ToArray(IIntFunction)

Mengembalikan array yang berisi semua elemen dalam koleksi ini, menggunakan fungsi yang disediakan generator untuk mengalokasikan array yang dikembalikan.

ToArray(Object[])

Mengembalikan array yang berisi semua elemen dalam koleksi ini; jenis runtime array yang dikembalikan adalah array yang ditentukan.

UnregisterFromRuntime()

Batalkan pendaftaran instans ini sehingga runtime tidak akan mengembalikannya dari pemanggilan di masa mendatang Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Diperoleh dari IJavaPeerable)

Implementasi Antarmuka Eksplisit

IIterable.Spliterator()

Spliterator Membuat lebih dari elemen dalam koleksi ini.

Metode Ekstensi

JavaCast<TResult>(IJavaObject)

Melakukan konversi jenis yang diperiksa runtime Bahasa Umum Android.

JavaCast<TResult>(IJavaObject)

Antarmuka akar dalam hierarki koleksi.

GetJniTypeName(IJavaPeerable)

Antarmuka akar dalam hierarki koleksi.

ToEnumerable(IIterable)

Antarmuka akar dalam hierarki koleksi.

ToEnumerable<T>(IIterable)

Antarmuka akar dalam hierarki koleksi.

Berlaku untuk