Merhabalar.Java generics metodunu kullanarak bir "bag" yaratmak istiyorum.Kullanıcı isterse bu yapıyı stringler ile isterse integerlar ile oluşturabilir.Sadece integer,double,float gibi veri tipleri olsaydı BST algoritmasını kullanırdım.Fakat kullanıcı bu yapıyı stringler ile de yaratabilecek.Hem string hem de diğer veri tiplari için ortak kullanabileceğim bir algoritma var mıdır?

soruldu: 27 Kas, 08:15

uyusuk's gravatar image

uyusuk
102
cevap kabul oranı: 0%


Şimdi veri tiplerini karşılaştıracak sıralama algoritması deyince aklıma gelen soru "kime göre?, neye göre?". Yani her veri tipini aynı algoritma ile karşılaştıramazsın. Onun yerine Comparable interface'inden türettiğin yeni Compare Class'ları ile OOP'e uygun şekilde yapabilirsin.

public class MyClass implements Comparable<MyClass>{
     public int compareTo(MyClass o){ }
    }
public class MyAnotherClass implements Comparable<MyAnotherClass >{
     public int compareTo(MyAnotherClass o){ }
    }

public class XComparerClass implements Comparable<XComparerClass>{
    public int compareTo(XComparerClass o){ }
}

biçiminde generic tabalı uygulayabilirsin. Java'da zaten bunu yapıyor.

permanent link

cevaplandı: 28 Kas, 03:51

Kaz%C4%B1m's gravatar image

Kazım
1.5k414
cevap kabul oranı: 34%

Şöyle ki bag diye bir sınıfım var.Bu java api class'ları kullanmadan kendimin yazdığı linkedlist(Generics yapıda).Kullanıcı bu linkedlist'e string tipi veri girebilir.Yada sadece integer tipi veri girebilir.Yani linkedlist'te hem string hem int tipi veri olmayacak.Sadece bir tipte veri olacak ama bu tip double,float,string,integer olabilir.Bu sınıf içinde bazı özellikler olacak,bir tanesi karşılaştırma özelliği yani.kullanıcı '3' verisini girerken önce linkedlist'te böyle bir değer var mı ona bakacak.Yada 'ayşe' verisini girecek.Misal string için ' (s.equals(t)) ' kodunu kullanabiliyorum.

(28 Kas, 17:49) uyusuk uyusuk's gravatar image

İnteger için ise "if a==3 " diyorum.Yani veri tipini bilmeden bu karşılaştırmaları sağlayacak bir metot bulmalıyım.Bu arada linkedlist i örnek verdim. Bag yapısı için pek etkili bir algoritma değil.Ayrıca cevabınız için teşekkür ederim.

(28 Kas, 17:50) uyusuk uyusuk's gravatar image

Ortak bir interface'de toplaman gerekli, o interface'i implement eden tüm sınıflarda kullanabilirsin. Mesela Bag class ise eğer BagComparer adında bir class oluşturup comparable interface'ini alan iki class'ı parametre olarak gönderip sortingi yapabilirsin. Yada abstract bırakırsın classı, Interface'i de implement edip override etmeden bırakırsın, Compare'ı implement etmek zorunda kalır concrete class.

(29 Kas, 14:01) Kazım Kaz%C4%B1m's gravatar image

Java omparable interface'ini bir araştır, Çok Classlı bir generic yapıda bile, karşılaştırma yaptırabilirsin BagComparer<comparable,comparable> şeklinde biri int biri string olmuş bir önemi olmaz.

(29 Kas, 14:02) Kazım Kaz%C4%B1m's gravatar image

Cevaplarınız için teşekkür ederim.

(01 Ara, 13:03) uyusuk uyusuk's gravatar image

Generics metodu diye birşey yoktur. Generics bir kavramdır. Arama algoritmalarını kendi ihtiyacına göre geliştirmek sana aittir. En basit arama algoritması düz ve sırasız listede her elemanı karşılaştırma yaparak aramaktır. Fakat saklayacağın veriler String ve Integer olabilir. Başka bir eleman ekleyemezsin. Arama yaparken de aranan verinin sadece String ve Integer olması gerekiyor. Bu kontrolleri yaptığın zaman gerisi sadece karşılaştırarak aramaktır.

class StoreMyData {
    private List<Object> myList = new ArrayList<Object>();

    public void addNew( Object myNewObj ) {
        if ( checkObject( myNewObj ) )
            myList.add( myNewObj );
    }

    private boolean checkObject( Object myNewObj ) {
        if ( myNewObj instanceof Integer )
            return true;
        else if ( myNewObj instanceof String )
            return true;
        return false;
    }

    public Object find( Object searchObj ) {
        if ( checkObject( searchObj ) ) {
            // TODO Traverse myList and try to find object and return it.
        }
        else
            return null;
    }
}

Bu ilk aklıma gelen yöntem. Daha iyi çözümler üretmek mümkün. Senin asıl anlaman gereken şey şu: üniversitelerde gördüğünüz algoritmalar en temel seviyede olan algoritmalardır. Sadece integer veriler ile arama yaptırırlar size. Bunu geliştirmek sizin algoritma bilginize, öğrenmeye olan isteğinize bağlıdır.

Takıldığın yerde sormaktan çekinme. İyi çalışmalar.

permanent link

cevaplandı: 28 Kas, 02:46

kodmanyagha's gravatar image

kodmanyagha
3.1k132852
cevap kabul oranı: 15%

değiştirildi: 28 Kas, 02:47

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×13
×6
×1
×1

Soruldu: 27 Kas, 08:15

Görüntüleme: 133 kez

Son güncelleme: 01 Ara, 13:03

powered by BitNami OSQA