Bir c sınıfının doğal sıralaması ile tutarlı olması (be consistent with equals) demek, c sınıfı içindeki her e1 ve e2 nesnesi için

Benzer belgeler
Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

ArrayList Uygulamaları

// hataları işaret eden referans

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

I Java Veri Yapıları 1

İÇİNDEKİLER VII İÇİNDEKİLER

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

Karşılaştırma İşlemleri ve Koşullu İfadeler

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

JAVADA DİZİ İŞLEMLERİ

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

Dizi ( Array ) ve Dizgi ( String )

BİL-141 Bilgisayar Programlama I (Java)

BİL132 Bilgisayar Programlama II

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Java: printf() Metodu İle Çıktıyı Biçemleme

Mantıksal İşlemler. 7.1 true, false, nil

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Class HashMap. Class HashMap java.lang.object java.util.abstractmap java.util.hashmap. Kılgıladığı Arayüzler: Cloneable, Map, Serializable

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

/*int sayi1, sayi2,toplam=0;

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

EMT2226 Nesne Yönelimli Programlamaya Giriş

Scanner Sınıfı. Class Scanner. java.util. java.lang.object java.util.scanner. Kılgıladığı Arayüzler: Closeable, AutoCloseable, Iterator<String>

Programlama Dilleri 3

Java Programlama. Diziler, Döngüler ve Karakter Katarları (String Sınıfı)

ArrayList(int initialcapacity) Sığası (capacity) parametrenin belirlediği sayıda olan bir dizi oluşturur.

Ders - 7 while döngüsü

Java, java.util paketi içinde mevcut olan Date sınıfını sağlar, bu sınıf güncel tarih ve zamanı kapsüllemektedir.

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

InputStream Sınıfı. Class InputStream. java.io. java.lang.object java.io.inputstream. Kılgıladığı Arayüzleri: Closeable, AutoCloseable

Java String İşlemleri

Java. Mustafa OF. Kocaeli Üniversitesi Kocaeli Meslek Yüksekokulu (Mart 2007)

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Nesne Yönelimli Programlama

ByteArrayOutputStream

Class LinkedList java.lang.object java.util.abstractcollection java.util.abstractlist java.util.abstractsequentiallist java.util.

BİL-141 Bilgisayar Programlama I (Java)

Algoritma ve Programlamaya Giriş II JAVA İLE PROGRAMLAMA. Muhammet BAYKARA

KUYRUKLAR. Doç. Dr. Aybars UĞUR

OPERATÖRLER Alıştırmalar

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

D İ Z İ L E R A R R A Y S

Aritmetik Operatörleri Hemen her programlama dilinde olduğu gibi java dilinde de aritmetik işlemler yaparken aşağıdaki operatörleri kullanırız:

Güz Yarıyılı Balıkesir Üniversitesi Bilgisayar Mühendisliği Bölümü

Güz Yarıyılı Balıkesir Üniversitesi Bilgisayar Mühendisliği Bölümü

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {...

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Class LinkedHashSet. Class LinkedHashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset java.util.

Class HashSet. Metotlar. Class HashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset

BASİT VERİ TÜRLERİ, STRİNGLER, VE KONSOL GİRİŞ/ÇIKIŞ

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

Insertion Sort. (Sokuşturma Sıralaması)

JAVA DEĞİŞKEN VE OPERATÖRLER. M.İLKUÇAR - 1

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

Bölüm 21 Çıktıyı Biçemleme

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

Şablon Türler (Generics)

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

Progress Barlı, FTP Dosya Upload Appleti

Görsel Programlama. Temel Veri Tipleri, Değişkenler, Operatörler, Akış Kontrolü, Sınıflar, Metotlar, Paketler ve JavaDoc

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

HashMap O rnekleri. Örnek: /* U : Uranyum Au : Altın Ag : Gümüş Li : Lityum H : Hidrojen Altın Yeni değer : Radyum */

BufferedReader. Kılgıladığı Arayüzler: Closeable, AutoCloseable, Readable. Altsınıfları: LineNumberReader. Bildirimi: public class BufferedReader

Arasınav Örnek Soruları Bahar 2018

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

2 VISUAL STUDIO 2012 GELİŞTİRME ORTAMI

Java da İşleçler, Ders #3 (4 Kasım 2009)

1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

BİL-141 Bilgisayar Programlama I (Java)

Temel Veri Türü İşlemleri

Transkript:

Interface Comparable java.lang Interface Comparable<T> Altarayüzleri Delayed, Name, ScheduledFuture<V> Kılgılayan Sınıflar: Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer, Calendar, Character, CharBuffer, Charset, CollationKey, CompositeName, CompoundName, Date, Date, Double, DoubleBuffer, ElementType, Enum, File, Float, FloatBuffer, Formatter.BigDecimalLayoutForm, FormSubmitEvent.MethodType, GregorianCalendar, IntBuffer, Integer, JTable.PrintMode, KeyRep.Type, LdapName, Long, LongBuffer, MappedByteBuffer, MemoryType, ObjectStreamField, Proxy.Type, Rdn, RetentionPolicy, RoundingMode, Short, ShortBuffer, SSLEngineResult.HandshakeStatus, SSLEngineResult.Status, String, Thread.State, Time, Timestamp, TimeUnit, URI, UUID Bildirimi: public interface Comparable<T> Bu arayüz, kendisini kılgılayan her sınıfın nesneleri üzerinde bir tümel (total) sıralama kurar. Bu sıralamaya sınıfın doğal sıralaması denilir. compareto() metoduna doğal sıralama metodu denilir. Bu arayüzü kılgılayan listeler ve arrayler, sırasıyla, Collections.sort() ve Arrays.sort() metotları ile sıralanırlar. Bu arayüzü kılgılayan nesneler bir SortedMap için anahtar olarak kullanılabilir. Benzer olarak, Bu arayüzü kılgılayan nesneler bir SortedSet için öğeler olarak kullanılabilir. Bu işi yaparken ayrı bir comparator a gerekseme yoktur. Bir c sınıfının doğal sıralaması ile tutarlı olması (be consistent with equals) demek, c sınıfı içindeki her e1 ve e2 nesnesi için (e1.compareto((object)e2) == 0) e1.equals((object)e2) deyimlerinin aynı boolean değerlerine sahip olması demektir; yani her ikisi aynı zamanda false ya da her ikisi aynı zamanda true değer almalıdır. null hiçbir sınıfın nesnesi değildir; dolayısıyla e.compareto(null) ifadesi false değerini alsa bile NullPointerException hatasını atar. Eşitlik ile tutarlı olmayan bir sıralama yapan comparator ile oluşturulan bir SortedSet ya da SortedMap yapıları beklenmedik davranışlar gösterebilirler. O nedenle, sıralamanın equals() metodu ile tutarlı olmasına dikkat etmelidir. java.lang.comparable 1

Đlgili Konular: Comparator, Collections.sort(java.util.List), Arrays.sort(Object[]), SortedSet, SortedMap, TreeSet, TreeMap Comparable Arayüzünün Metodu int compareto(t o) Verilen nesneyi parametredeki nesne ile mukayese eder. Aşağıdaki program, compareto() metodu ile String leri mukayese ediyor. str1.compareto(str2) metodunun değerleri şöyledir: str1 < str2 ise eksi tamsayı değer alır. str1 = str2 ise 0 değer alır. str1 > str2 ise artı tamsayı değer alır. public class ComparableDemo { public static void main(string args[]) { String str1 = "String nesnesi değiştirilemez - immutable"; String str2 = "String nesnesi değiştirilemez - immutable"; String str3 = "Integer nesnesi değiştirilebilir - mutable"; int result = str1.compareto(str2); System.out.println(result); result = str2.compareto(str3); System.out.println(result); result = str3.compareto(str1); System.out.println(result); 0 10-10 Aşağıdaki program, Comparable arayüzünü kılgılayan Otomobil sınıfından nesneler yaratıyor. Sonra onları array yapısına dönüştürüyor. compareto() metodu ile öğeleri mukayese ediliyor ve Array.sort() metodu ile sıralanıyor. import java.util.arrays; public class ComparableDemo { public void comparableexample() { Comparable arayüzünü kılgılayan nesneler yaratır Otomobil car1 = new Otomobil("Toyota", 2006, 5000); Otomobil car2 = new Otomobil("BMW", 2007, 5000); 2

Otomobil car3 = new Otomobil("Chrysler", 2007, 4000); Nesneleri compareto metodu ile mukayese eder System.out.println("Otomobil 1 = Otomobil 2: " + car1.compareto(car2)); System.out.println("Otomobil 1 = Otomobil 3: " + car1.compareto(car3)); System.out.println("Otomobil 2 = Otomobil 3: " + car2.compareto(car3)); System.out.println(); Nesnneleri sıralamak için array yaratılıyor ve Array.sort() metodu kullanılıyor Otomobil[] cararray = new Otomobil[] {car1, car2, car3; Arrays.sort(carArray); Sıralanan array yazdırılıyor for (Otomobil car : cararray) System.out.println(car.toString()); Nesneleri mukayese etmek ve sıralamak için kullanılan Otomobil sınıfı class Otomobil implements Comparable { private String make; private int year; private int mileage; public Otomobil(String make, int year, int mileage) { this.make = make; this.year = year; this.mileage = mileage; Comparable arayüzünü kılgılamak için gereklidir Bu metot iki otomobilin kilometrelerini mukayese eder public int compareto(object obj) { if (obj instanceof Otomobil) { Otomobil car = (Otomobil) obj; if (this.mileage > car.getmileage()) return 1; else if (this.mileage < car.getmileage()) return -1; return 0; public void setmake(string make) { this.make = make; public void setyear(int year) { this.year = year; public void setmileage(int mileage) { this.mileage = mileage; 3

public String getmake() { return make; public int getyear() { return year; public int getmileage() { return mileage; public String tostring() { StringBuffer buffer = new StringBuffer(); buffer.append("marka: " + make + "\n"); buffer.append("yıl: " + year + "\n"); buffer.append("kilometre: " + mileage + "\n"); return buffer.tostring(); public static void main(string[] args) { new ComparableDemo().comparableExample(); Otomobil 1 = Otomobil 2: 0 Otomobil 1 = Otomobil 3: 1 Otomobil 2 = Otomobil 3: 1 Marka: Chrysler Yıl: 2007 Kilometre: 4000 Marka: Toyota Yıl: 2006 Kilometre: 5000 Marka: BMW Yıl: 2007 Kilometre: 5000 Aşağıdaki program kentler ile nüfuslarını bir ArrayList yaratıyor. Kurucu her ile bir kod atıyor. compareto() metodu listeyi nüfusa göre artan sıraya diziyor. Iterator ile illeri, yapılan sırada yazdırıyor. import java.util.*; class ComparableDemo { public static void main(string[] args) { List ts1 = new ArrayList(); 4

ts1.add(new Kentler("Ankara", 4650802)); ts1.add(new Kentler("Đstanbul", 12915158)); ts1.add(new Kentler("Đzmir", 3868308)); ts1.add(new Kentler("Bursa", 2550645)); Collections.sort(ts1); Iterator itr = ts1.iterator(); while (itr.hasnext()) { Object element = itr.next(); System.out.println(element + "\n"); class Kentler implements Comparable { int ĐlKodu; String iladı; double Nufus; static int i; public Kentler() { ĐlKodu = i++; iladı = "bilinmiyor"; Nufus = 0.0; public Kentler(String ename, double nufus) { ĐlKodu = i++; iladı = ename; Nufus = nufus; public String tostring() { return "ĐlKodu: " + ĐlKodu + "\n" + "ĐlAdı : " + iladı + "\n" + "Nüfus : " + Nufus; public int compareto(object obj1) { if (this.nufus == ((Kentler) obj1).nufus) return 0; else if ((this.nufus) > ((Kentler) obj1).nufus) return 1; else return -1; ĐlKodu: 3 ĐlAdı : Bursa Nüfus : 2550645.0 ĐlKodu: 2 ĐlAdı : Đzmir Nüfus : 3868308.0 ĐlKodu: 0 ĐlAdı : Ankara Nüfus : 4650802.0 ĐlKodu: 1 5

ĐlAdı : Đstanbul Nüfus : 1.2915158E7 Aşağıdaki program Date sınıfının compareto() metodunu kullanarak iki tarihi mukayese etmektedir. import java.util.date; public class CompareDate { public static void main(string[] args) { Birinci tarih Date d1 = new Date(); 10 milisaniyelik ara ver try { Thread.sleep(10); catch (Exception e) { Đkinci tarihi yarat Date d2 = new Date(); System.out.println("Birinci tarih : " + d1); System.out.println("Đkinci tarih : " + d2); * Date sınıfının compareto metodunu kullanarak iki tarihi mukayese et * Birinci tarih büyükse fonksiyonun değeri pozitif, küçükse negatif, * eşitse 0 olacaktır int results = d1.compareto(d2); if (results > 0) System.out.println("Birinci tarih büyüktür"); else if (results < 0) System.out.println("Đkinci tarih büyüktür"); else System.out.println("Đki tarih eşittir"); Birinci tarih : Tue May 17 02:13:36 EEST 2011 Đkinci tarih : Tue May 17 02:13:36 EEST 2011 Đkinci tarih büyüktür Aşağıdaki program == operatörü ile String pointerlerini ve equals() metodu ile String nesnelerini mukayese ediyor. public class EqualsString { public static void main(string args[]) { Integer num = new Integer(12234); String str = new String("12234"); * Nesnelerin birisi Integer öteki String tipinden olduğu için 6

* num.equals(str) metodunun değeri false olur System.out.println("num.equals(str) : " + num.equals(str)); * Stringlerden birisi null değer alıyorsa equals * metodu onları mukayese edemez. String s1 = null; String s2 = null; * null Stringlerin pointerleri == operatörü ile * mukayese edilirse false değer verir System.out.println("s1==s2 : " + s1 == s2); * null Stringler equals() metodu ile mukayese edilemez System.out.println("s1.equals(s2) : " + s1.equals(s2)); * equals metodu, nesnenin bellekte nerede olduğuna bakmadan * değerlerinin eşit olup olmadığını belirtir String str1 = new String("Yağ yağ yağmur, tarlada çamur, teknede hamur"); String str7 = new String("Yağ yağ yağmur, tarlada çamur, teknede hamur"); String str8 = "Yağ yağ yağmur, tarlada çamur, teknede hamur"; System.out.println("str1.equals(str8) : " + str1.equals(str8)); System.out.println("str1.equals(str7) : " + str1.equals(str7)); System.out.println("str1 = " + str1); System.out.println("str1.substring(0) = " + str1.substring(0)); String str2 = str1.substring(0); System.out.println("str2 = " + str2); String str3 = " ", str4 = " "; String str5 = "Yağ", str6 = "yağ"; System.out.println("str3 = " + str3); System.out.println("str4 = " + str4); System.out.println("str5 = " + str5); System.out.println("str6 = " + str6); * str1 ve str2 aynı değeri aldıklarından, * equals metodu onları eşit sayar. * Ancak == operatörü onların pointerlerinin *farklı olduğunu söyler System.out.println("str1.equals(str2) : " + str1.equals(str2)); System.out.println("str1 == str2 : " + str1 == str2); * " " şeklinde boşluk uzunlıkları eşit olan boş * String değerleri eşittir. Ancak pointerleri eşit * değildir. Boş Stringlerin uzunlukları * farklı olunca eşit olmazlar System.out.println("str3.equals(str4) : " + str3.equals(str4)); System.out.println("str3 == str4 : " + str3 == str4); bir harfi bile farklı olan iki metin eşit değildir System.out.println("str5.equals(str6) : " + str5.equals(str6)); num.equals(str) : false false str1.equals(str8) : true str1.equals(str7) : true str1 = Yağ yağ yağmur, tarlada çamur, teknede hamur str1.substring(0) = Yağ yağ yağmur, tarlada çamur, teknede hamur str2 = Yağ yağ yağmur, tarlada çamur, teknede hamur 7

str3 = str4 = str5 = Yağ str6 = yağ str1.equals(str2) : true false str3.equals(str4) : true false str5.equals(str6) : false public class EqualsString { public static void main(string[] args) { int value1 = 10, value2 = 10, number1 = 10; char a = 'a', b = 'b'; double number2 = 10d; Cat tekir = new Cat("Tekir"); Cat kedi = new Cat("Tekir"); Cat karabaş = tekir; if (value1 == value2) { System.out.println("Eşit"); if (a!= b) { System.out.println("Eşit değil"); Tipleri farklı ama değerleri aynıdır if (number1 == number2) { System.out.println("Eşit"); Farklı nesneleri işaret ediyorlar; sonuç: false if (tekir == kedi) { System.out.format("(tekir==kedi) nin değeri : " + (tekir == kedi)); else { System.out.println("(tekir==kedi) nin değeri : " + (tekir == kedi)); Aynı nesneye işaret ediyor; sonuç true olur if (tekir == karabaş) { System.out.println("(tekir==karabaş) nin değeri : " + (tekir == karabaş)); if (true!= false) { System.out.println("true!=false"); class Cat { private String ad; Cat(String ad) { this.ad = ad; 8

Eşit Eşit değil Eşit (tekir==kedi) nin değeri : false (tekir==karabaş) nin değeri : true true!=fals 9