Array, Vector ve arraylist gibi yapılar java da indisli yapılar olarak geçer.LinkedList yapısı ise iki yönlü bağlı liste şeklindedir.Bağları iki yönlü olduğundan dolayı ya baştan sona ya da sondan başa doğru okunabilir.
Yani bağlı listelerde listenin içindeki ortadaki ya da istediğin bir düğüme doğrudan erişim hakkın yok napalım ölelim mi ? dediğini duyar gibiyim.Bunun için geliştirilen arama yöntemi linear search(lineer sörç) yani Türkçe adıyla doğrusal arama.
Peki bu doğrusal arama(linear search) nasıl işliyor ?
Sıralanmamış bağlı listelere ulaşabilmenin tek yolu olmasıyla bilinen bu arama yöntemi listeyi baştan sona ya da sondan başa ( keyfine kalmış gibi görünse de tam olarak öyle değil ) tarıyor ve aradığını yakaladığında true false şeklinde döndürüyor.
Collections sınıfına ait contains() diye bir method var.Bu method tüm listlere uygulanabilir.Liste isterse bağlı, ister sıralı, ister indisli kısacası aklına ne geliyorsa contains methodu alayına gider.Çalışma mantığı ise 0,1 yani true, false şeklinde.Aradığını bulursa true bulamazsa false.
İndisli listeler üzerinde çalışıyorsanız(array, arraylist, vector) lastIndexOf() methodu azıcık ingilizcen varsa adından da anlayabileceğin gibi listedeki son ögenin indisini veriyor.Ağaç yapısında kullanamayacağını sadece indisli ve bağlı listelerde kullanabileceğini unutma.
binarySearch()
Collections sınıfımızda bulunan binarySearch metodu yarılama yöntemi yapacak algoritma yazmasından kurtarmasından dolayı tercih edilmektedir.
Sanki sosyal bilgiler konusu paylaşır gibi java yazısı yazdığımı fark ettim.Bu yüzden burayı ufak tefek bir örnekle yeşillendirelim.
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
List<String> linkedList = new LinkedList<String>();
linkedList.add("Deniz");
linkedList.add("Demirel");
linkedList.add("Java");
linkedList.add("Notları");
boolean bool = linkedList.contains("Java");
System.out.println(bool);
/*
Yukarıda yazdığım gibi contains metodu 0,1 şeklinde dönüş
yaptığı için veri tipi olarak boolean kullandık.Burada
listemizde java kelimesinin olup olmadığı check ediliyor.
Programı çalıştırdığınızda true cevabıyla karşılaşırsınız
bunun sebebi listede buluyor fakat konumunu bilmiyor işte tam
burada yiğidim aslanım binarySearch ortaya giriyor.
*/
int x = Collections.binarySearch(linkedList,"Java");
System.out.println(x);
/*
Şimdi yukarıda gördüğün bu işlemde binarySeach metodu ile
konumuda bulduk java kelimesi listemizde 2.sırada. 0-1-2-3
*/
}
Yani bağlı listelerde listenin içindeki ortadaki ya da istediğin bir düğüme doğrudan erişim hakkın yok napalım ölelim mi ? dediğini duyar gibiyim.Bunun için geliştirilen arama yöntemi linear search(lineer sörç) yani Türkçe adıyla doğrusal arama.
Peki bu doğrusal arama(linear search) nasıl işliyor ?
Sıralanmamış bağlı listelere ulaşabilmenin tek yolu olmasıyla bilinen bu arama yöntemi listeyi baştan sona ya da sondan başa ( keyfine kalmış gibi görünse de tam olarak öyle değil ) tarıyor ve aradığını yakaladığında true false şeklinde döndürüyor.
Collections sınıfına ait contains() diye bir method var.Bu method tüm listlere uygulanabilir.Liste isterse bağlı, ister sıralı, ister indisli kısacası aklına ne geliyorsa contains methodu alayına gider.Çalışma mantığı ise 0,1 yani true, false şeklinde.Aradığını bulursa true bulamazsa false.
İndisli listeler üzerinde çalışıyorsanız(array, arraylist, vector) lastIndexOf() methodu azıcık ingilizcen varsa adından da anlayabileceğin gibi listedeki son ögenin indisini veriyor.Ağaç yapısında kullanamayacağını sadece indisli ve bağlı listelerde kullanabileceğini unutma.
binarySearch()
Collections sınıfımızda bulunan binarySearch metodu yarılama yöntemi yapacak algoritma yazmasından kurtarmasından dolayı tercih edilmektedir.
Sanki sosyal bilgiler konusu paylaşır gibi java yazısı yazdığımı fark ettim.Bu yüzden burayı ufak tefek bir örnekle yeşillendirelim.
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
List<String> linkedList = new LinkedList<String>();
linkedList.add("Deniz");
linkedList.add("Demirel");
linkedList.add("Java");
linkedList.add("Notları");
boolean bool = linkedList.contains("Java");
System.out.println(bool);
/*
Yukarıda yazdığım gibi contains metodu 0,1 şeklinde dönüş
yaptığı için veri tipi olarak boolean kullandık.Burada
listemizde java kelimesinin olup olmadığı check ediliyor.
Programı çalıştırdığınızda true cevabıyla karşılaşırsınız
bunun sebebi listede buluyor fakat konumunu bilmiyor işte tam
burada yiğidim aslanım binarySearch ortaya giriyor.
*/
int x = Collections.binarySearch(linkedList,"Java");
System.out.println(x);
/*
Şimdi yukarıda gördüğün bu işlemde binarySeach metodu ile
konumuda bulduk java kelimesi listemizde 2.sırada. 0-1-2-3
*/
}
Yorumlar
Yorum Gönder