java - How to add a object to a sorted set that's within a hashmap of objects -
java - How to add a object to a sorted set that's within a hashmap of objects -
i'm trying add together passenger object sorted set. sorted set in cruise object. of cruise objects within hashmap. i'm kinda new collections i'm having trouble. effort i'm doing.
hashmap<string, cruise> cruisemap = new hashmap<string, cruise>(); sortedset<passenger> passengerset = new treeset<passenger>(); queue<passenger> waitinglist = new linkedlist<passenger>(); cruise cruise = new cruise("1", passengerset, waitinglist, false); cruisemap.put("1", cruise); passenger passenger = new passenger("smith", "j"); cruisemap.get("1").getpassengerset().add(passenger);
the passenger's parameters strings lastly name first initial. cruise's parameters string date, sortedset passengers, there's queue waiting list , boolean variable determine if ship has departed. maintain getting tons of errors when run code. in advance help.
here errors i'm recieving.
exception in thread "main" java.lang.classcastexception: edu.ilstu.passenger cannot cast java.lang.comparable @ java.util.treemap.compare(unknown source) @ java.util.treemap.put(unknown source) @ java.util.treeset.add(unknown source) @ edu.ilstu.driver.main(driver.java:48)
passenger class
public class passenger { private string lastname = ""; private string firstname = ""; public passenger() { lastname = "no lastly name yet"; firstname = "no first name yet"; } public passenger(string lastname, string firstname) { this.lastname = lastname; this.firstname = firstname; } /** * @return lastname */ public string getlastname() { homecoming lastname; } /** * @param lastname lastname set */ public void setlastname(string lastname) { this.lastname = lastname; } /** * @return firstname */ public string getfirstname() { homecoming firstname; } /** * @param firstname firstname set */ public void setfirstname(string firstname) { this.firstname = firstname; } /* (non-javadoc) * @see java.lang.object#tostring() */ @override public string tostring() { homecoming lastname + " " + firstname; } }
cruise class
public class cruise { private string day = ""; private sortedset<passenger> passengerset = new treeset<passenger>(); private queue<passenger> waitinglist = new linkedlist<passenger>(); private boolean hasdeparted = false; public cruise() { day = "no day yet"; passengerset = null; waitinglist = null; hasdeparted = false; } public cruise(string day, sortedset<passenger> passengerset, queue<passenger> waitinglist, boolean hasdeparted) { this.day = day; this.passengerset = passengerset; this.waitinglist = waitinglist; this.hasdeparted = hasdeparted; } /** * @return day */ public string getday() { homecoming day; } /** * @param day day set */ public void setday(string day) { this.day = day; } /** * @return passengerset */ public sortedset<passenger> getpassengerset() { homecoming passengerset; } /** * @param passengerset passengerset set */ public void setpassengerset(sortedset<passenger> passengerset) { this.passengerset = passengerset; } /** * @return waitinglist */ public queue<passenger> getwaitinglist() { homecoming waitinglist; } /** * @param waitinglist waitinglist set */ public void setwaitinglist(queue<passenger> waitinglist) { this.waitinglist = waitinglist; } /** * @return hasdeparted */ public boolean ishasdeparted() { homecoming hasdeparted; } /** * @param hasdeparted hasdeparted set */ public void sethasdeparted(boolean hasdeparted) { this.hasdeparted = hasdeparted; } }
it happens because passengerset
treeset
(sortedset
), means sort after each adding, because treeset
ordered set , has sequence unlike usual hashmap
. every sortedmap
must know how sort elements contains. can done 2 ways:
comparable<t>
interface. you can add together custom comparator<t>
sortedmap
. so, have 3 ways prepare (may more, 3 of them - obvious):
get rid ofsortedmap
, let's replace sortedmap
map
, replace treemap
hashmap
in code. add custom comparator passengerset
hashmap<string, cruise> cruisemap = new hashmap<string, cruise>(); sortedset<passenger> passengerset = new treeset<passenger>(new comparator<passenger>() { @override public int compare(passenger lhs, passenger rhs) { homecoming lhs.getfirstname().compareto(rhs.getfirstname()); } }); queue<passenger> waitinglist = new linkedlist<>(); cruise cruise = new cruise("1", passengerset, waitinglist, false); cruisemap.put("1", cruise); passenger passenger = new passenger("smith", "j"); cruisemap.get("1").getpassengerset().add(passenger);
implement comparable<t>
interface in passenger
class.
public class passenger implements comparable<passenger> { private string lastname = ""; private string firstname = ""; public passenger() { lastname = "no lastly name yet"; firstname = "no first name yet"; } public passenger(string lastname, string firstname) { this.lastname = lastname; this.firstname = firstname; } /** * @return lastname */ public string getlastname() { homecoming lastname; } /** * @param lastname lastname set */ public void setlastname(string lastname) { this.lastname = lastname; } /** * @return firstname */ public string getfirstname() { homecoming firstname; } /** * @param firstname firstname set */ public void setfirstname(string firstname) { this.firstname = firstname; } /* (non-javadoc) * @see java.lang.object#tostring() */ @override public string tostring() { homecoming lastname + " " + firstname; } @override public int compareto(passenger another) { homecoming firstname.compareto(another.firstname); } }
java object collections hashmap sortedset
Comments
Post a Comment