CodeGym/Java Blogu/Rastgele/Java'da Koleksiyonlar sınıfı
John Squirrels
Seviye
San Francisco

Java'da Koleksiyonlar sınıfı

grupta yayınlandı
MERHABA! Son birkaç derste, ustalığımızda büyük ilerleme kaydettik ArrayList. Ancak şimdiye kadar yalnızca en basit işlemleri gerçekleştirdik: kaldırma, ekleme ve görüntüleme. Elbette bu, geliştiricilerin ArrayList. Diziler ve sınıf hakkındaki dersi hatırlıyor musunuz Arrays? Java'nın yaratıcıları, bu sınıfı, programcıların dizilerle çalışırken karşılaştıkları en yaygın görevlerin üstesinden gelmesi için özel olarak tasarladı. Ve ne hakkındaArrayList? Elbette, onunla gerçekleştirilmesi gereken ortak görevlerin bir listesi vardır. Hepsi belirli bir sınıfta mı uygulandı yoksa her seferinde kendi uygulamamızı mı yazmamız gerekiyor? Tabii ki, her şeyi kendiniz yazmanıza gerek yok. Koleksiyonları içeren en yaygın işlemler, özel statik sınıfta zaten uygulanmıştır Collections. Koleksiyon sınıfı - 1 Java'da, bir grup veri yapısı genellikle koleksiyon olarak adlandırılır . Veriler birçok farklı şekilde saklanabilir. ArrayListŞimdiye kadar sadece verilerin bir dizide saklandığı sınıfı inceledik . Diğer koleksiyonlarla daha sonra tanışacağız. CollectionsŞimdilik, sınıfın yalnızca bunlarla çalışmak için tasarlanmadığını anlamak yeterlidir.ArrayList, aynı zamanda diğer koleksiyon türleriyle (dolayısıyla adı). Peki, sınıf hangi görevlerle Collectionsçalışırken gerçekten yardımcı oluyor ArrayList? İlk ve en bariz olanı sıralamadır. Dizilerle ilgili dersimizde sayılarla ilgili bir örnek ele aldık. Şimdi stringlerle bir örnek ele alacağız. Sınıf , koleksiyonların içeriğini sıralama yöntemini Collectionsuygular :sort()
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
Çıktı: [Dünya, Jüpiter, Mars, Merkür, Neptün, Satürn, Uranüs, Venüs] Diziler alfabetik olarak sıralanmıştır! Ama neden alfabetik olarak? Sınıf Stringaslında dizelerin nasıl karşılaştırıldığını yöneten mantığı uygular (alfabetik olarak olur). Kendi oluşturduğunuz sınıflar için kendi karşılaştırma mantığınızı uygulayabilirsiniz ancak buna diğer derslerde değineceğiz. Sınıf Collectionsayrıca bir ArrayList. min()Bu, and yöntemleri kullanılarak yapılır max():
public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
Çıktı: 7 1 Doğal olarak, bu, tüm öğeler üzerinde yineleme yapmak ve en büyük/en küçük öğeyi bulmak için kodu manuel olarak yazmaktan çok daha uygundur :) Bir başka çok kullanışlı yöntem de reverse(). Öğeler ters sırada olacak şekilde listeyi "çevirmek" zorunda kalsaydık, bunu nasıl yapardık? Muhtemelen böyle bir algoritmayı kendi başınıza yazmak o kadar kolay olmazdı :) Neyse ki, yöntem reverse()zaten nasıl olduğunu biliyor. Yöntemin gezegenlerimizi alfabetik olarak sıralamasından hoşlanmadığımızı sort()ve sıralarını tersine çevirmek istediğimizi varsayalım: Z'den A'ya:
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
Çıktı: [Venüs, Uranüs, Satürn, Neptün, Merkür, Mars, Jüpiter, Dünya] Sıralama, elementlerin düzeni vs. hakkında çok konuştuk . Peki ya tam tersi bir amacımız olsaydı? Örneğin, bir tombala oyunu uygulamaya çalıştığımızı varsayalım. Davul'a 100 numara ekliyoruz. Ekranda birer birer görünmelidirler. Biletindeki tüm sayıların üstünü çizen ilk oyuncu kazanır. Bu yöntemi kullanarak uygulamak kolaydır shuffle():
public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> bingoDrum = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           bingoDrum.add(i);// add the numbers 1 to 100 to the drum
       }

       Collections.shuffle(bingoDrum);// Mix it up
       System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(bingoDrum.get(i));
       }

   }
}
Çıktı: Dikkatiniz lütfen! İşte davuldan ilk 10 numara! 32 61 4 81 25 8 66 35 42 71 İşte bu kadar kolay! Sorun çözüldü ve oyunun bize düşen kısmı yazıldı :) Şimdi farklı bir durum düşünelim. solarSystemDaha önce, gezegenleri içeren bir liste oluşturmuştuk . Ve biri dışında her yönden bize uygun görünüyor: ondan öğeleri silebilir ve yenilerini ekleyebilirsiniz ! Bu kesinlikle beklediğimiz davranış değil: Programımızda güneş sistemi değiştirilemez olmalıdır. Sınıfın Collectionsçok ilginç bir yöntemi var: unmodifiableList(). Argüman olarak iletilen listeden değişmez bir liste oluşturur. Bu listeye öğe ekleyemez veya silemezsiniz. Güneş sistemindeki gezegenlerin listesiyle uğraşırken, tam da istediğimiz şey bu!
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");// Try to add a new element
   }
}
Çıktı: Java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) at Main.main(Main.java:21) adresindeki "main" java.lang.UnsupportedOperationException dizisindeki istisna Bu bir hatadır: yapamazsınız herhangi bir şey ekleyin solarSystem! List<>Burada dikkat etmeniz gereken tek şey, bu tür her tür liste için ortak olduğu için bu yöntemin ( değil ) dönmesidir ArrayList<>. Kolayca meydana gelebilecek bir başka oldukça yaygın durum, programcının öğeleri yanlış sırada eklemesidir. Bu olursa ve Merkür ile Neptün'ün karışmış olduğunu görürsek, şu yöntemi kullanarak bu hatayı düzeltebiliriz swap():
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// The planets are in the wrong order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
swap()Yönteme listemizi ve değiştirilmesi gereken iki öğenin indekslerini geçiyoruz . Yöntemin referanslarla değil indekslerle çalıştığını unutmayın. Yani, burada yöntemi kullanmak zorunda kaldık ArrayList.indexOf(). Çıktı: [Neptün, Venüs, Dünya, Mars, Jüpiter, Satürn, Uranüs, Merkür] [Merkür, Venüs, Dünya, Mars, Jüpiter, Satürn, Uranüs, Neptün] Son olarak çok ilginç bir yöntemle tanışacağız : disjoint(). İki koleksiyonun kesişip kesişmediğini, yani en az bir özdeş öğeye sahip olup olmadıklarını kontrol eder . Eğer yapmazlarsa, true değerini döndürür. Bunu yaparlar, sonra yanlış döndürür
public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
Gördüğünüz gibi, iki listemiz tamamen farklı öğelere sahip, bu nedenle programın çıktısı true . Bu ilginç ve çok faydalı bir sınıftır. Gibi Arrays, bizim için birçok rutin, sıkıcı iş yapıyor ve başka şeylere odaklanmamızı sağlıyor.
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok