Set<E>
Ve List<E>
arayüzleri arasındaki temel fark nedir ?
Set<E>
Ve List<E>
arayüzleri arasındaki temel fark nedir ?
Yanıtlar:
List
sıralı bir eleman dizisidir, oysa sıralanmamış elemanların Set
ayrı bir listesidir (teşekkür ederim, Quinn Taylor ).
Sıralı bir koleksiyon (sekans olarak da bilinir). Bu arabirimin kullanıcısı, her öğenin listeye nereye eklendiği konusunda kesin denetime sahiptir. Kullanıcı öğelere tamsayı dizinine (listedeki konum) göre erişebilir ve listedeki öğeleri arayabilir.
Yinelenen öğe içermeyen bir koleksiyon. Daha resmi olarak, kümeler e1.equals (e2) ve en fazla bir boş eleman olacak şekilde e1 ve e2 elemanlarını içermez. Adından da anlaşılacağı gibi, bu arayüz matematiksel küme soyutlamasını modeller.
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Sıralı eleman listeleri (benzersiz veya değil)
Java'nın arayüzüne uygun DizineList
erişilebilir
kullanılarak uygulandı
Eşsiz elementlerin Listeleri:
adlandırılmış Java'nın arayüzüne ConformSet
Can değil indeksi tarafından erişilebilir
kullanılarak uygulandı
Hem arayüzler Set
hem List
de Java'nın adlı arayüzüne uygundurCollection
Kavramsal olarak, genellikle kopyaların bir Çanta olarak kullanılmasına izin veren ve kopyalara izin vermeyen sıralı bir gruplamadan bahsediyoruz.
Liste
Ayarlamak
List
s genellikle yinelenen nesnelere izin verir.
List
s sipariş edilmelidir ve bu nedenle dizin tarafından erişilebilir.
Uygulama sınıfları arasında şunlar bulunmaktadır: ArrayList
, LinkedList
,Vector
Set
s do not yinelenen nesneleri tanır. Uygulamaların çoğu sıralanmamıştır, ancak uygulamaya özeldir.
Uygulama sınıfları şunları içerir:
HashSet
(sırasız),
LinkedHashSet
(sıralı),
TreeSet
(doğal sipariş veya sağlanan karşılaştırıcı tarafından sıralanmıştır)
Java arayüzlerinden bahsederken, neden Javadoc'a bakmıyorsunuz ?!
List
, tipik olarak kopyalara izin veren sıralı bir koleksiyon (sıra)Set
a, yinelenen öğe içermeyen bir koleksiyondur, yineleme sırası uygulama tarafından garanti edilebilirSetlerle ilgili düzen eksikliğinden bahsedilmiyor: uygulamaya bağlı.
LinkedHashSet
kod daha sonra siparişe dayanıyorsa genellikle sol tarafta kalırım . Ben sadece Set
bir tane gibi kullanırsanız kullanın, temel uygulama bir LinkedHashSet
ya da böyle olduğunu varsayamazsınız, bugün olabilir, ama yarın kod değişiklikleri ve başarısız olacaktır.
Aradığınız cevap bu olmayabilir, ancak koleksiyon sınıflarının JavaDoc'u aslında oldukça açıklayıcı. Kopya / yapıştırılan:
Sıralı bir koleksiyon (sekans olarak da bilinir). Bu arabirimin kullanıcısı, her öğenin listeye nereye eklendiği konusunda kesin denetime sahiptir. Kullanıcı öğelere tamsayı dizinine (listedeki konum) göre erişebilir ve listedeki öğeleri arayabilir.
Kümelerin aksine, listeler genellikle yinelenen öğelere izin verir. Daha resmi olarak, listeler tipik olarak e1 ve e2 eleman çiftlerine izin verir, öyle ki e1.equals (e2) ve boş elemanlara izin veriyorlarsa tipik olarak çoklu boş elemanlara izin verirler. Bir kullanıcının, kullanıcı eklemeye çalıştığında çalışma zamanı istisnaları atarak yinelenenleri yasaklayan bir liste uygulamak istemesi düşünülemez, ancak bu kullanımın nadir olmasını bekliyoruz.
Küme, farklı nesnelerin sırasız bir grubudur - yinelenen nesnelere izin verilmez. Genellikle eklenen nesnelerin karma kodu kullanılarak uygulanır. (Belirli uygulamalar sipariş ekleyebilir, ancak Set arabiriminin kendisi eklemez.)
Liste, kopya içerebilecek sıralı bir nesne grubudur. Bu bir ile uygulanabilecek ArrayList
, LinkedList
vb
List
sipariş edilmez 😕
Liste:
Liste, yinelenen öğelere ve boş değerlere izin verir. Öğelerin karşılık gelen dizinini kullanarak arama yapmak kolaydır ve ayrıca öğeleri ekleme sırasında görüntüler. Örnek: (LinkedList)
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);
}
}
}
Çıktı:
1
1
555
333
888
555
boş
boş
Değeri: 1
Değeri: 555
Değer: 333
Değer: 888
Değer: 555
Değer: boş
Değeri: boş
Set:
Set, yinelenen öğelere izin vermez ve tek null değere izin verir.Öğeleri görüntülemek için herhangi bir sıra tutmaz.Yalnızca TreeSet
artan sırada görüntülenir.
Örnek: (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");
}
}
}
Çıktı:
tüm
merhaba
karşılama
dünyası
java.lang.NullPointerException
Set null değerine ve yinelenen değere izin vermiyor
Liste Vs Kümesi
1) Set, kopyalara izin vermez. Liste kopyalamaya izin verir. Set'in uygulanmasına dayanarak, ekleme talimatını da korur.
örneğin: LinkedHashSet
. Ekleme sırasını korur.Lütfen buraya tıklayın
2) yöntem içerir . Setin doğası gereği erişim için daha iyi performans verecektir. En iyi durumda o (1). Ancak List'in başlatacak performans sorunu var contains
.
Tüm List
sınıflar yerleştirme sırasını korur. Performans ve diğer özelliklere dayanan farklı uygulamalar kullanırlar (örneğin ArrayList
, belirli bir endekse erişim hızı LinkedList
için, sadece düzeni korumak için). Anahtar olmadığı için kopyalara izin verilir.
Set
Sınıfları yerleştirme düzeni sağlamak yoktur. İsteğe bağlı olarak (olduğu gibi SortedSet
) belirli bir düzen uygulayabilirler , ancak tipik olarak bazı hash işlevine (olduğu gibi HashSet
) dayalı olarak uygulama tanımlı bir sıraya sahiptirler . Yana Set
s anahtar tarafından erişilebilir, çoğaltmaları izin verilmez.
Sıralama ... bir liste bir sıraya sahiptir, bir küme yoktur.
Java'da List ve Set arasındaki birkaç nota layık farklar aşağıdaki gibi verilir:
1) Java'da List ve Set arasındaki temel fark yinelenen öğelere izin vermektir. Java'daki liste yinelemelere izin verirken Set yinelemeye izin vermez. Set içine kopya eklerseniz eski değerin yerini alacaktır. Java'da Set uygulamasının tüm uygulamaları yalnızca benzersiz öğeler içerir.
2) Java'da Liste ve Küme arasındaki bir diğer önemli fark düzendir. Set sıralı bir koleksiyonken Set sıralanmamış bir koleksiyon. Liste, öğelerin ekleme sırasını korur, daha önce eklenen herhangi bir öğenin, daha sonra eklenen herhangi bir öğeden daha düşük bir dizine geçeceği anlamına gelir. Java'da ayarlanmış herhangi bir düzen yoktur. Set, Sette saklanan Nesnelerin Karşılaştırılabilir ve Karşılaştırıcı yöntemleri ile tanımlanan belirli Sıralama düzeninde Set öğelerini saklayabilen SortedSet adlı başka bir alternatif sağlar.
3) Java'da List arabiriminin popüler uygulaması ArrayList, Vector ve LinkedList'i içerir. Set arabiriminin popüler uygulaması HashSet, TreeSet ve LinkedHashSet'i içerir.
Ekleme sırasını veya nesneyi korumanız gerekiyorsa ve koleksiyonunuz Liste'den daha fazla kopya içerebiliyorsa, Liste gitmenin bir yoludur. Öte yandan, gereksiniminiz Set'ten başka herhangi bir kopya olmadan benzersiz koleksiyonu korumaksa, gitmenin yolu budur.
Liste:
Ayarlamak:
Set<E>
ve List<E>
her ikisi de türdeki öğeleri depolamak için kullanılır E
. Fark, Set
sırasız bir şekilde saklanması ve yinelenen değerlere izin vermemesidir. List
öğeleri sıralı bir şekilde saklamak için kullanılır ve yinelenen değerlere izin verir.
Set
öğelere bir dizin konumu List
ile erişilemez ve öğelere bir dizin konumu ile erişilebilir.
Merhaba Bu kadar çok cevap verilmiş .. Şimdiye kadar bahsedilmeyen bazı noktalara işaret edeyim:
RandomAccess
. Set uygulamalarının hiçbiri bunu yapmaz.ListIterator
her iki yönde yinelemeyi destekleyen bir özel Yineleyici kullanır . Set, yalnızca 1 yönlü yinelemeyi destekleyen Iterator kullanırEn büyük fark temel kavramdır.
Gönderen Seti ve Liste arayüzünün. Set matematik kavramdır. Set yöntemi koleksiyonu genişletir. Ancak yeni yöntem eklemeyin. size () kardinalite anlamına gelir (daha fazlası BitSet.cardinality, Linear counter , Log Log , HyperLogLog ). addAll () birleşim anlamına gelir. retainAll () kesişim anlamına gelir. removeAll () fark anlamına gelir.
Ancak bu kavramların eksikliğini listeleyin . Liste , Koleksiyon arabiriminin sağlamadığı dizi kavramını desteklemek için birçok yöntem ekler . temel kavram INDEX . add (index, element), get (index), search (indexOf ()), remove (index) öğelerini içerir. Liste ayrıca " Koleksiyon Görünümü " alt listesini de sağlar . Setin görünümü yok. konumsal erişim yok. List ayrıca Koleksiyonlar sınıfında birçok algoritma sağlar . sort (Liste), binarySearch (Liste), (List) karıştırmak, (List) dolguyu (List) ters. yöntem parametreler olduğunu Liste arayüzü. yinelenen öğeler sadece kavramların sonucudur. temel fark değil.
Temel fark kavram. Set matematik kavramdır. Liste dizi kavramdır.
İşte harika ile açık bir örnek. bir küme ve bir liste oluşturuyorum. sonra her liste içinde 20 rastgele oluşturulan değeri depolamaya çalışın. üretilen değer 0 ila 5 aralığında olabilir
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
Sonuç :
rastgele sayılar: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Ayarlamak : [4, 1, 0, 2, 3]
liste : [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Farkın şu olduğunu görebilirsiniz:
Küme: Bir Küme koleksiyonlarında Yinelenen öğeler içeremez. aynı zamanda sıralanmamış bir koleksiyon. Set'teki verilere erişmek için yalnızca Yineleyici kullanmak gerekir ve dizin için geri alma mümkün değildir. Çoğunlukla benzersizlik toplama gerektiğinde kullanılır.
Liste: Liste, eklendikçe doğal sırada olacak şekilde yinelenen öğelere sahip olabilir. Böylece indeks veya yineleyici bazında veri alınabilir. İndekse göre erişmesi gereken koleksiyonu depolamak için yaygın olarak kullanılır.
BAŞLIK: List VS Set
Java'nın Koleksiyon Çerçevesi adlı en önemli konusunu inceledim. Koleksiyonlar hakkındaki küçük bilgilerimi sizinle paylaşmayı düşündüm. Liste, Küme, Harita bunun en önemli konusudur. Şimdi List and Set ile başlayalım.
Liste ve Küme arasındaki fark:
List, sınıfı genişleten bir koleksiyon sınıfıdır; AbstractList
burada Set, sınıfı genişleten AbstractSet
ancak her ikisi de Koleksiyon arabirimini uygulayan bir koleksiyon sınıfıdır .
Liste arabirimi yinelenen değerlere (öğeler) izin verirken, Set arabirimi yinelenen değerlere izin vermez. Set'te yinelenen öğeler olması durumunda, eski değerlerin yerini alır.
Liste arabirimi NULL değerlere izin verir, burada Set arabirimi Null değerlere izin vermez. Set içinde Null değerlerin kullanılması durumunda verir NullPointerException
.
Liste arayüzü ekleme sırasını korur. Bu, Listedeki öğeleri, yineleyici veya her bir stil için elde ettiğimiz şekilde eklediğimiz anlamına gelir. Ancak, Set
uygulamaların ekleme talimatını sürdürmesi gerekmez. ( Ekleme sırasını SortedSet
kullanıyor TreeSet
ve kullanıyor olsa da LinkedHashSet
).
List arabiriminin kendi yöntemleri tanımlanırken Set arabiriminin kendi yöntemi yoktur, bu nedenle Set yalnızca Koleksiyon arabirimi yöntemlerini kullanır.
Liste arabirimi adlı bir eski sınıfa Vector
sahipken, Set arabirimi herhangi bir eski sınıfa sahip değildir
Son fakat en az değil ... Bu listIterator()
yöntem yalnızca Liste Sınıfları içindeki öğeler arasında geçiş yapmak için kullanılabilirken, Set sınıfı öğelerine erişmek için iterator () yöntemini kullanabiliriz
Başka bir şey ekleyebilir miyiz? Lütfen bana haber ver.
Teşekkürler.
List
ve Set
soyut bir sınıf (bahsettiğiniz) biçiminde "temel" uygulamaları olan arabirimlerdir. Ayrıca, çoğu küme null değerlere izin verdiğinden (ancak uygulamaya bağlı) # 3 tamamen yanlıştır . # 5 ve # 7'yi anlamıyorum ve # 6 Vector
için eski değil, sadece senkronize edildi ve senkronizasyon gerektiğinde kullanılması tercih edilmiyor.
Ayarlamak:
Yinelenen değerler olamaz Sipariş, uygulamaya bağlıdır. Varsayılan olarak sıralanmamıştır Dizine göre erişilemiyor
Liste:
Yinelenen değerlere sahip olabilir Varsayılan olarak sıralanmıştır Dizine göre erişebilir