Given data such as :
user, library ID, book ID, year
1,10, 100,2000
2,10, 100,2000
3,10, 100,2000
2,10, 200,2000
3,10, 200,2000
1,10, 200,2000
I tried storing them using TreeMap but the second group overwrite the first , any suggestions ?
TreeMap<Integer, Integer> bookMap = new TreeMap<Integer, Integer>();
TreeMap<Integer, TreeMap<Integer, Integer>> libraryMap = new TreeMap<Integer, TreeMap<Integer, Integer>>();
TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>> UserMap = new TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>>();
bookMap.put(100, 2000);
libraryMap.put(10,bookMap);
UserMap.put(1,libraryMap);
UserMap.put(2,libraryMap);
UserMap.put(3,libraryMap);
bookMap = new TreeMap<Integer, Integer>();
bookMap.put(200, 2000);
libraryMap = new TreeMap<Integer, TreeMap<Integer, Integer>>();
libraryMap.put(10,bookMap);
UserMap.put(1,libraryMap);
UserMap.put(2,libraryMap);
UserMap.put(3,libraryMap);
Solution #1
still using maps only, but I think this solution will take long time and consume more memory ?
TreeMap<Integer, Integer> bookMap = new TreeMap<Integer, Integer>();
TreeMap<Integer, TreeMap<Integer, Integer>> libraryMap = new TreeMap<Integer, TreeMap<Integer, Integer>>();
TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>> UserMap = new TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>>();
bookMap.put(100, 2000);
bookMap.put(300, 2003);
libraryMap.put(10,bookMap);
UserMap.put(1,libraryMap);
UserMap.put(2,libraryMap);
UserMap.put(3,libraryMap);
int userID = 1;
int libraryID =10;
if (UserMap.containsKey(userID))
{
if ( UserMap.get(userID).containsKey(libraryID))
{
TreeMap<Integer, Integer> storedBookMap = UserMap.get(userID).get(libraryID);
bookMap= new TreeMap<Integer, Integer>();
bookMap.putAll(storedBookMap);
bookMap.put(200, 2000);
libraryMap = new TreeMap<Integer, TreeMap<Integer, Integer>>();
libraryMap.put(libraryID,bookMap);
UserMap.put(userID,libraryMap);
}
}
every user can have more than one book, but when you do:
you overwrite whatever was in the
UserMapunder the key1. so you should make theUserMapof typeTreeMap<Integer,ArrayList<whatever>>and add data to the list.also, there’s no sense in nesting the maps. each entity in you program (user/book/library) has an id, so i would suggest keeping a single map for each type of entity and using ids for reference. i.e:
now if you want to know which books user 1 has, you do something like: