S.a. Arkadaşlar,
Bugünkü konumuz ArrayListelerde sıralama olacak, fakat bu sıralamalarımız basit manada String veya int sıralamak değil de , bir önceki yazımızda bahsettiğimiz objeler arasında sıralama olacaktır. Ne demek istiyoruz peki , elimizde bir tip değişken var. Örneğin int[] dizi={1,4,2,3}; gibi bir dizi olsun elimizde bunu nasıl sıralıyorduk Arrays.sort(dizi) yazıyorduk ve sıralama yapıyorduk. ArrayListlerde de buna benzer bir olay var. Orda Collection.sort() diye sıralama yapıyoruz, fakat bazen karşımıza bir sınıf geldiğini ve bunun birden fazla değişkeni olduğunu düşünelim hangisine göre sıralama yapacağı ise muallakta kalacağı için işte tam bu noktada comporable ve comparator devreye girer. Şimdi kodumuz üzerinden gidelim. Umarım bu sayede daha iyi pekişecektir söylemeye çalıştıklarımız.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Car implements Comparable <Car>{
//<Car> enerjik ile sınırlama getiriyor
//Sınırlama koymak istemezsek comporTo metodunda
//değişiklik yapmak zorundayız.Car yerine Object tanımlanmalı
public Car(String marka, Integer fiyat) {
super();
this.marka = marka;
this.fiyat = fiyat;
}
String marka;
Integer fiyat;
@Override
public int compareTo(Car car) {
return fiyat.compareTo(car.fiyat);
//eğer ters sıralama yapmak istersek
//car.fiyat.compareTo(fiyat);
//markaya göre sıralama yapmak içinse
//return marka.compareTo(car.marka);
}
//burada compareTo ile neye göre sıralama
//yapmak istediğimizi override etmezsek hata alırız
@Override
public String toString() {
return "Car [ marka=" + marka + ", fiyat=" + fiyat + "]";
}
}
public class ComparableTest {
public static void main(String[] args) {
Car ford = new Car("ford", 100);
Car fiat = new Car( "fiat", 50);
Car subaru = new Car("subaru", 5000);
Car bmw = new Car("bmw", 1000);
List <Car> carList = new ArrayList <Car>();
carList.add(ford);
carList.add(fiat);
carList.add(subaru);
carList.add(bmw);
carList.add(new Car("mercedes",250));//böyle de yapılabilir
for (Car c : carList) {
System.out.println(c);
}
System.out.println();
Collections.sort(carList);
System.out.println("Comparable Sorting");
for (Car c : carList) {
System.out.println(c);
}
}
}
Yukarıda Comparable yapısını anlatmaya çalıştık Gerekli yerlerde yorum satırlarıyla kodlarımızı destekledik. Umarız anlamanıza yardımcı olmuştur. Şimdi de Comparator yapısına geçelim. Bunun için yine kodumuzu yazıp içerisini yorum satırlarıyla desteklemeye çalışacağız.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Car {
public Car() {
//hatırlarsanız eğer herhangi bir constructor
//tanımlamazsak otomatik oluşuyordu .
}
public Car(String marka, Integer fiyat) {
super();
this.marka = marka;
this.fiyat = fiyat;
}
String marka;
Integer fiyat;
@Override
public String toString() {
return "Car ["+ " marka=" + marka + ", fiyat=" + fiyat + "]";
}
}
public class ComparatorTest implements Comparator<Car> {
// Doğal sıralama için Comparable , bundan farklı
//bir sıralama içinse comparator kullanılır
public static void main(String[] args) {
Car ford = new Car("ford", 100);
Car fiat = new Car( "fiat", 50);
Car subaru = new Car("subaru", 5000);
Car bmw = new Car("bmw", 1000);
List<Car> carList = new ArrayList <Car>();
carList.add(ford);
carList.add(fiat);
carList.add(subaru);
carList.add(bmw);
for (Car c : carList) {
System.out.println(c);
}
System.out.println();
ComparatorTest comparatorTest = new ComparatorTest();
// overloaded sort metodunu kullanabiliriz.
// burada 1.arguman siralamak istedigimiz List
// 2.arguman ise Comparator arabirimini uygulayan sinifimiz olacaktir.
Collections.sort(carList, comparatorTest);
//Arrays.sort metodu da gerekli kodlamalarla kullanılabilir
System.out.println("Comparator Sorting");
for (Car c : carList) {
System.out.println(c);
}
}
// Comparator -> compare metodunu override etmemiz gerekir
// Comparable -> compareTo metoduydu.
@Override
public int compare(Car car1, Car car2) {
return car2.fiyat.compareTo(car1.fiyat);
//tersten sıralamak için car1 ile car2 yer değiştirilmeli
}
}
Array List etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Array List etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
22 Ocak 2015 Perşembe
ArrayList
S.a. Arkadaşlar,
Bugünkü konumuz ArrayList olacak. Dizileri hepimiz biliyoruzdur. Dizilerde ne yapıyorduk eleman tutuyorduk,siliyorduk vs fakat burada bir diziye tek bir tip değişken atayabiliyorduk. Mesela int[] a= new int[size]; diyorduk ve sadece intenger tanımlayabiliyorduk. Fakat arraylistlerde farklı tipleri tanımlama olanağı sağlar fakat siz bunu istemezseniz jenerikler ile de kısıtlama yapabiliyorsunuz. Jenerik konusunu ileri ki konularda anlatacağız inşallah, fakat bir nevi tip kısıtlaması dersek şuan için bize yeterli olacağını düşünüyorum. Ayrıca arraylistler dinamik yapılardır. Eleman ekledikçe genişleyen sildikçe küçülen yapılardır. Dizilerde sabit bir boyut veriyorduk bildiğiniz gibi ve bundan fazla eleman ekleme şansımız olmuyordu. Daha az eleman eklediğimizde ise boşuna bellekte yer tutmuş oluyoruz. ArrayListlerin böyle bir avantajı da var. Son olarak eleman silme gibi işlemler veya araya eleman ekleme gibi konularında diziler için ekstra kod yazmanız gerekirken ArrayListler bunu kendisi hallediyor ve size bir zorluk çıkarmıyor. Sayılar ve String için sıralama yapabiliyor, fakat farklı objeler için sıralama yapamıyor. Mesela bir Car sınıfımız var , onun için farklı yöntemler var onları da ileride nasip olursa anlatırız. Şimdilik teknik olarak söyleyeceklerimiz bunlar. Kodlar içerisinde eksik gördüğümüz yerleri yine anlatmaya çalışacağız. Şimdi yavaştan kod kısmına geçelim.
public static void main(String[] args) {
ArrayList myArrayList = new ArrayList();
// ArrayList'e elemani add metodu ile ekleyebiliriz.
myArrayList.add(10);
myArrayList.add((short)20);
myArrayList.add("test");
myArrayList.add(true);
myArrayList.add(new Test());//paketismi+sıfınismi+@id
myArrayList.set(2, "new set text");//set ile indexteki elemani override
myArrayList.add(1, '#');//overload ile yeni eleman ekleyebiliriz
//set ile farkı elemanı üzerine yazılmaz, elemanı aşağı kaydırır.
for (Object obje: myArrayList) {
System.out.println(obje);
}
boolean isEmpty = myArrayList.isEmpty();//ArrayList Boş mu,boşsa true
int size = myArrayList.size(); // kaç elemanlı
System.out.println(isEmpty + " Eleman Sayısı: " + size);
boolean b= myArrayList.contains(20);//burada int olduğu için false
boolean b2= myArrayList.contains((short)20); //short olduğundan true
boolean b3= myArrayList.contains("10"); //yukarıda int burada String!
System.out.println(b+ " " + b2+ " " + b3);
int indexOf = myArrayList.indexOf(10); //indexini atar
int indexOf2 = myArrayList.indexOf(20); //int olduğundan -1 döndürür
int indexOf3 = myArrayList.indexOf((short)20);
System.out.println(indexOf + " " + indexOf2 + " " + indexOf3);
myArrayList.remove(0); //index siler
System.out.println("0.eleman Silindikten Sonra:" + myArrayList.size());
myArrayList.clear(); //tüm arraylisti siler
System.out.println("Dizi tamamen silinince" + myArrayList.size());
//şimdi diziyi tekrar yazdıralım,görüldüğü üzere birşey yazmaz
for (Object obje: myArrayList) {
System.out.println(obje);
}
}
Peki biz array ile arrayList arasında herhangi bir dönüşüm yapabilir miyiz diye bir soru sorarsak onun da cevabı evet olacak. Her iki dönüşüme de izin veriyor. Bunun için birden fazla yol olabilir fakat biz kendiliğinden gelen toArray ve asListleri kullanacağız. Bu iki yöntem arasında farklar vardır. Bunları burada söylemektense kod içerisinde uygularken yorum satırlarıyla desteklemeyi tercih edelim.
public static void main(String[] args) {
String[] namesArray = { "names1", "names2", "names3", "names4" };
List namesList = Arrays.asList(namesArray);
// Arrays -> List dönüşümü yapıyoruz
for (String str : namesArray) {
System.out.print(str + " ");
}
// List'teki elemani guncellersek otomatik olarak
//dizi arraydeki eleman da guncellenecektir.
//fakat toArray ile güncellenme olmayacaktır
namesList.set(0, "set new names1");
System.out.println("");
for (String str : namesArray) {
System.out.print(str + " ");
}
// namesList.add("java.lang.UnsupportedOperationException");
//bu şekilde eleman eklemeyiz fakat to Array bu böyle değildir
}
NOT: adList ile toArray görev olarak aynı olsa dahi özellik olarak birbirlerinin tersi gibidirler. Kodun içinde gerekli açıklamaları yapmaya özen gösterdik. Yazımızı burada son veriyor , iyi çalışmalar diliyoruz.
Bugünkü konumuz ArrayList olacak. Dizileri hepimiz biliyoruzdur. Dizilerde ne yapıyorduk eleman tutuyorduk,siliyorduk vs fakat burada bir diziye tek bir tip değişken atayabiliyorduk. Mesela int[] a= new int[size]; diyorduk ve sadece intenger tanımlayabiliyorduk. Fakat arraylistlerde farklı tipleri tanımlama olanağı sağlar fakat siz bunu istemezseniz jenerikler ile de kısıtlama yapabiliyorsunuz. Jenerik konusunu ileri ki konularda anlatacağız inşallah, fakat bir nevi tip kısıtlaması dersek şuan için bize yeterli olacağını düşünüyorum. Ayrıca arraylistler dinamik yapılardır. Eleman ekledikçe genişleyen sildikçe küçülen yapılardır. Dizilerde sabit bir boyut veriyorduk bildiğiniz gibi ve bundan fazla eleman ekleme şansımız olmuyordu. Daha az eleman eklediğimizde ise boşuna bellekte yer tutmuş oluyoruz. ArrayListlerin böyle bir avantajı da var. Son olarak eleman silme gibi işlemler veya araya eleman ekleme gibi konularında diziler için ekstra kod yazmanız gerekirken ArrayListler bunu kendisi hallediyor ve size bir zorluk çıkarmıyor. Sayılar ve String için sıralama yapabiliyor, fakat farklı objeler için sıralama yapamıyor. Mesela bir Car sınıfımız var , onun için farklı yöntemler var onları da ileride nasip olursa anlatırız. Şimdilik teknik olarak söyleyeceklerimiz bunlar. Kodlar içerisinde eksik gördüğümüz yerleri yine anlatmaya çalışacağız. Şimdi yavaştan kod kısmına geçelim.
public static void main(String[] args) {
ArrayList myArrayList = new ArrayList();
// ArrayList'e elemani add metodu ile ekleyebiliriz.
myArrayList.add(10);
myArrayList.add((short)20);
myArrayList.add("test");
myArrayList.add(true);
myArrayList.add(new Test());//paketismi+sıfınismi+@id
myArrayList.set(2, "new set text");//set ile indexteki elemani override
myArrayList.add(1, '#');//overload ile yeni eleman ekleyebiliriz
//set ile farkı elemanı üzerine yazılmaz, elemanı aşağı kaydırır.
for (Object obje: myArrayList) {
System.out.println(obje);
}
boolean isEmpty = myArrayList.isEmpty();//ArrayList Boş mu,boşsa true
int size = myArrayList.size(); // kaç elemanlı
System.out.println(isEmpty + " Eleman Sayısı: " + size);
boolean b= myArrayList.contains(20);//burada int olduğu için false
boolean b2= myArrayList.contains((short)20); //short olduğundan true
boolean b3= myArrayList.contains("10"); //yukarıda int burada String!
System.out.println(b+ " " + b2+ " " + b3);
int indexOf = myArrayList.indexOf(10); //indexini atar
int indexOf2 = myArrayList.indexOf(20); //int olduğundan -1 döndürür
int indexOf3 = myArrayList.indexOf((short)20);
System.out.println(indexOf + " " + indexOf2 + " " + indexOf3);
myArrayList.remove(0); //index siler
System.out.println("0.eleman Silindikten Sonra:" + myArrayList.size());
myArrayList.clear(); //tüm arraylisti siler
System.out.println("Dizi tamamen silinince" + myArrayList.size());
//şimdi diziyi tekrar yazdıralım,görüldüğü üzere birşey yazmaz
for (Object obje: myArrayList) {
System.out.println(obje);
}
}
Peki biz array ile arrayList arasında herhangi bir dönüşüm yapabilir miyiz diye bir soru sorarsak onun da cevabı evet olacak. Her iki dönüşüme de izin veriyor. Bunun için birden fazla yol olabilir fakat biz kendiliğinden gelen toArray ve asListleri kullanacağız. Bu iki yöntem arasında farklar vardır. Bunları burada söylemektense kod içerisinde uygularken yorum satırlarıyla desteklemeyi tercih edelim.
public static void main(String[] args) {
String[] namesArray = { "names1", "names2", "names3", "names4" };
List namesList = Arrays.asList(namesArray);
// Arrays -> List dönüşümü yapıyoruz
for (String str : namesArray) {
System.out.print(str + " ");
}
// List'teki elemani guncellersek otomatik olarak
//dizi arraydeki eleman da guncellenecektir.
//fakat toArray ile güncellenme olmayacaktır
namesList.set(0, "set new names1");
System.out.println("");
for (String str : namesArray) {
System.out.print(str + " ");
}
// namesList.add("java.lang.UnsupportedOperationException");
//bu şekilde eleman eklemeyiz fakat to Array bu böyle değildir
}
NOT: adList ile toArray görev olarak aynı olsa dahi özellik olarak birbirlerinin tersi gibidirler. Kodun içinde gerekli açıklamaları yapmaya özen gösterdik. Yazımızı burada son veriyor , iyi çalışmalar diliyoruz.
7 Aralık 2014 Pazar
Collections
S.a. Arkadaşlar,
Bu makalemizde sizlerle birlikte hem collections topluluğunu hem tanıyıp hem de tanıtmaya çalışacağımız. Varsa eksiklerimiz şimdiden affola.
Bu makalemizde sizlerle birlikte hem collections topluluğunu hem tanıyıp hem de tanıtmaya çalışacağımız. Varsa eksiklerimiz şimdiden affola.
Öncelikle collections nedir , ne
işe yarar , neden kullanılır onun üzerinde biraz konuşacağız daha sonra
ayrıntılı olarak üzerinde durmaya gayret edeceğiz. Biz bazı işlemlerimizi
yaparken önce for kullanırız , for kullanımından daha güzel şekilde
değerlendirerek dizilerle işlem yapmaya başladık fakat dizilerden daha gelişmiş
olan collections ile işlem yapmak hem daha kolay hem daha fazla özellikler
barındırır. Bunlardan bazıları ise veri eklerken static durumdan kurtulmak ,
araya eleman eklemek , aradan eleman silmek vb özelliklerini dizilerle yapmak
çok zor ve karışık iken collections ile çok rahat olabiliyor.
Resim-1
Java Collections [1]
Set: Birden fazla aynı kayıt
içeremez. Tekildir. Belirli bir sıralaması yoktur.
Sorted
Set: Eğer sıralı bir set oluşturacaksak bu yöntem kullanırız.
HashSet:
Burada ise düzensiz ama hızlı bir erişim vardır.
List: Birden fazla aynı kayıt
içerebilir. Belirli bir sıralaması vardır.
Array
List: Sıralı listelerde hızlı erişim sağlar.
Linked
List: Farklı bir liste yöntemi kullanır.
Map: Her öğresine anahtar atanan
topluluktur. Tekildir.
Hash
Map: Sıralaması yoktur, sorted map’e
göre daha hızlıdır.
Sorted
Map: Anahtarına göre sıralanmış kümedir(map).
Kaynakça
[1] Timur Karaçay, Veri Yapıları
Etiketler:
Array List,
Collections,
Java,
List,
Map,
programming,
Set
Kaydol:
Kayıtlar (Atom)