sorting in order of values

Discussion in 'Java' started by Shikha, Aug 16, 2006.

  1. Shikha

    Shikha Guest

    I need to make a collection wherein i can have a key value pair and the
    sorting happens in alphabetical order of values. also i want that after
    the initial insert of values if i add or remove any value then the
    collection should be sorted again in alphabetical order.
    - i cant use arraylist because it doesnt have a key value pair.
    - i cant use a hashmap because when i iterate the values i get them in
    a random order whereas i want them in alphabetical order.
    - TreeMap does the sorting in order of keys.
    - LinkedHashMap does the sorting in order of insertion. so for the
    initial insert it will be fine
    but when i add and remove values it will not give me the alphabetical
    order.

    would appreciate some help on this

    thanks
    shikha
    Shikha, Aug 16, 2006
    #1
    1. Advertising

  2. Shikha

    Eric Sosman Guest

    Shikha wrote:

    > I need to make a collection wherein i can have a key value pair and the
    > sorting happens in alphabetical order of values. also i want that after
    > the initial insert of values if i add or remove any value then the
    > collection should be sorted again in alphabetical order.
    > - i cant use arraylist because it doesnt have a key value pair.
    > - i cant use a hashmap because when i iterate the values i get them in
    > a random order whereas i want them in alphabetical order.
    > - TreeMap does the sorting in order of keys.
    > - LinkedHashMap does the sorting in order of insertion. so for the
    > initial insert it will be fine
    > but when i add and remove values it will not give me the alphabetical
    > order.


    Try just putting the (key,value) pairs in an ordinary HashMap.
    When you want to visit all the values (or all the pairs) in order
    by value, use .values() to extract the values (or .entrySet() to
    extract the pairs), sort them, and traverse the sorted data instead
    of the original Map.

    That might not be suitable for all situations, but works for
    many. If it's not the right answer for your predicament, you'll
    need to describe your purposes more fully.

    --
    Eric Sosman
    lid
    Eric Sosman, Aug 16, 2006
    #2
    1. Advertising

  3. Shikha

    Shikha Guest


    > Try just putting the (key,value) pairs in an ordinary HashMap.
    > When you want to visit all the values (or all the pairs) in order
    > by value, use .values() to extract the values (or .entrySet() to
    > extract the pairs), sort them, and traverse the sorted data instead
    > of the original Map.


    you mean to say that i should get the values and put them in an
    arraylist and then access the values from the arraylist instead of
    getting them from the map ?


    > That might not be suitable for all situations, but works for
    > many. If it's not the right answer for your predicament, you'll
    > need to describe your purposes more fully.


    what you suggested should i work. it would have been good if i were
    able to directly put the values in some collection which does a sorting
    of values.
    i want to take a list of vendors from the database alongwith their ids
    and store them in a collection. then i want to keep adding and removing
    values from this collection based on some user inputs.

    Thanks
    shikha
    Shikha, Aug 16, 2006
    #3
  4. Shikha

    Shikha Guest


    > > Try just putting the (key,value) pairs in an ordinary HashMap.
    > > When you want to visit all the values (or all the pairs) in order
    > > by value, use .values() to extract the values (or .entrySet() to
    > > extract the pairs), sort them, and traverse the sorted data instead
    > > of the original Map.

    >
    > you mean to say that i should get the values and put them in an
    > arraylist and then access the values from the arraylist instead of
    > getting them from the map ?
    >

    Eric, I was about to try this out but i realised that this wouldnt
    work. Because i need to populate the values from a Map. the reason
    being that when the user selects a particular value i need to pick the
    corresponding key for the value. so if i populate the values from
    arraylist i wouldnt be able to get the corresponding id.

    any other suggestions ?

    thanks
    shikha
    Shikha, Aug 16, 2006
    #4
  5. Shikha

    Eric Sosman Guest

    Shikha wrote On 08/16/06 09:25,:
    >>> Try just putting the (key,value) pairs in an ordinary HashMap.
    >>>When you want to visit all the values (or all the pairs) in order
    >>>by value, use .values() to extract the values (or .entrySet() to
    >>>extract the pairs), sort them, and traverse the sorted data instead
    >>>of the original Map.

    >>
    >>you mean to say that i should get the values and put them in an
    >>arraylist and then access the values from the arraylist instead of
    >>getting them from the map ?
    >>

    >
    > Eric, I was about to try this out but i realised that this wouldnt
    > work. Because i need to populate the values from a Map. the reason
    > being that when the user selects a particular value i need to pick the
    > corresponding key for the value. so if i populate the values from
    > arraylist i wouldnt be able to get the corresponding id.


    If you need the (key,value) pairs sorted by value, not
    just the values themselves, use theMap.entrySet() to get
    them: it gives you a Collection of Map.Entry objects, each
    representing one (key,value) pair. Sort that Collection of
    pairs using a Comparator that looks at the values.

    --
    Eric Sosman, Aug 16, 2006
    #5
  6. Shikha

    Stefan Ram Guest

    Eric Sosman <> writes:
    >If you need the (key,value) pairs sorted by value, not
    >just the values themselves, use theMap.entrySet() to get
    >them: it gives you a Collection of Map.Entry objects, each
    >representing one (key,value) pair. Sort that Collection of
    >pairs using a Comparator that looks at the values.


    When a value is inserted, it could be inserted into both
    collections, keeping their respective invariants: So the
    sorted collection will stay sorted (insertation sort).

    Just inserting a single value into the correct position
    should be faster than to sort anew. Shifting all following
    values could be faster if a linked list is used.

    However: All this is very low-level. So it might be best to
    encapsulate the whole decision and implement it in the most
    convenient way at first. Then, when the first copies of the
    program are sold and it turns out that this implementation
    really is too slow, it still can be optimized for version 1.1.
    Stefan Ram, Aug 16, 2006
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jason

    dataview sorting in manual order?

    Jason, Sep 1, 2004, in forum: ASP .Net
    Replies:
    7
    Views:
    4,383
    Jason
    Sep 2, 2004
  2. Soren Kuula
    Replies:
    2
    Views:
    481
    Soren Kuula
    Feb 1, 2004
  3. Rakesh
    Replies:
    5
    Views:
    368
    Terry Reedy
    Apr 1, 2005
  4. cspoh
    Replies:
    0
    Views:
    233
    cspoh
    Jul 31, 2003
  5. Stephan Kämper
    Replies:
    2
    Views:
    227
    Stephan Kämper
    Jan 18, 2004
Loading...

Share This Page