• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Paul Clapham
  • Ron McLeod
  • Jeanne Boyarsky
  • Tim Cooke
Sheriffs:
  • Liutauras Vilda
  • paul wheaton
  • Henry Wong
Saloon Keepers:
  • Tim Moores
  • Tim Holloway
  • Stephan van Hulst
  • Carey Brown
  • Frits Walraven
Bartenders:
  • Piet Souris
  • Himai Minh

Comparable interface problem

 
Ranch Hand
Posts: 634
Eclipse IDE Chrome Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

KB book page-573,574
topic Sorting with Comparator




The other handy thing about
the Comparator interface is that you can use it to sort instances of any class—even
classes you can't modify—unlike the Comparable interface, which forces you to
change the class whose instances you want to sort.


i just cannot understand that while using Comparable interface how are we changing the class
for instance:


IN The compareTo function definition in DVDInfo ,only the compareTo function is called with DVDInfo objects.now,where are we changing the class.
 
Sheriff
Posts: 14691
16
Eclipse IDE VI Editor Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Please ShowSomeEffort. You can find a lot of tutorials showing you how the Comparable and Comparator interfaces work.
 
Mohit G Gupta
Ranch Hand
Posts: 634
Eclipse IDE Chrome Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
sorry Christophe.
i have updated my query
 
Christophe Verré
Sheriff
Posts: 14691
16
Eclipse IDE VI Editor Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You already know that you can use easy Comparable or Comparator to sort your DVDInfo. If you use the Comparable interface, you have to change the DVDInfo class, by implementing the Comparable interface and its compareTo method. However, if you use a Comparator, you don't need to touch your DVDInfo class. This is more flexible, because you can make as many comparators as you want.

 
Ranch Hand
Posts: 42
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

mohitkumar gupta wrote:The other handy thing about
the Comparator interface is that you can use it to sort instances of any class—even
classes you can't modify—unlike the Comparable interface, which forces you to
change the class whose instances you want to sort.

i just cannot understand that while using Comparable interface how are we changing the class



Say you have 2 String objects that you want to compare. String implements Comparable which means it has a compareTo method that compares Strings alphabetically so "Apple" comes before "Bed" which comes before "Cork".

Say, for whatever reason, in your program that you want Strings to be ordered by the length of the String i.e. "Bed" (3 characters) comes before "Cork" (4 characters) which comes before "Apple" (5 characters).

You do not have access to the String class - you can't modify the compareTo method of String.java.

But you can write a new class




Hoever, if you have objects of your own class you want to compare - you can do it by modifying your own class:



So in the first example you didn't modify the class you wanted to compare (String class) but in the second example, you could modify it (MyClass class).
 
Mohit G Gupta
Ranch Hand
Posts: 634
Eclipse IDE Chrome Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
i have understood what you are trying to say



but ,i think return of the compare function should be

and in the second case when the comparable interface is implemented,the function to be used should be

 
Kevin Kilbane
Ranch Hand
Posts: 42
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

mohitkumar gupta wrote:i have understood what you are trying to say



but ,i think return of the compare function should be

and in the second case when the comparable interface is implemented,the function to be used should be



Incorrect I'm afraid.

s1.length and age are both ints so you they don't have compareTo methods to call (they don't have ANY methods to call).

Even if s1.length and age weren't ints, if they were objects of some type, it doesn't necessarily mean you have to use (s1 and age's) compareTo methods within the compare / compareTo methods (of StringLengthComparator and MyClass). It depends totally on the design of your program and what attributes of an object you need to sort on.
 
Mohit G Gupta
Ranch Hand
Posts: 634
Eclipse IDE Chrome Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

1. class MyClass implements Comparable {
2. int age;
3.
4. public int compare(MyClass mc) {
5. return this.age - mc.age;
6. }
7. }




compare function takes two arguments and not one as mentioned in java API.
i think the compare function definition is wrong
 
Kevin Kilbane
Ranch Hand
Posts: 42
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

mohitkumar gupta wrote:

1. class MyClass implements Comparable {
2. int age;
3.
4. public int compare(MyClass mc) {
5. return this.age - mc.age;
6. }
7. }




compare function takes two arguments and not one as mentioned in java API.
i think the compare function definition is wrong



That is correct but a class that implements Comparable should over-write compareTo, not compare. My example above is wrong, it should have read:



Apologies for confusion
 
Tick check! Okay, I guess that was just an itch. Oh wait! Just a tiny ad:
Free, earth friendly heat - from the CodeRanch trailboss
https://www.kickstarter.com/projects/paulwheaton/free-heat
reply
    Bookmark Topic Watch Topic
  • New Topic