I have a pretty large Hashmap (~250MB). Creating it takes about 50-55 seconds, so I decided to serialize it and save it to a file. Reading from the file takes about 16-17 seconds now.
The only problem is that lookups seems to be slower this way. I always thought that the hashmap is read from the file into the memory, so the performance should be the same compared to the case when I create the hashmap myself, right? Here is the code I am using to read the hashmap into a file:
File file = new File("omaha.ser");
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(new BufferedInputStream(f));
omahaMap = (HashMap<Long, Integer>) s.readObject();
s.close();
300 million lookups take about 3.1 seconds when I create the hashmap myself, and about 8.5 seconds when I read the hashmap from file.
Say you have a bunch of animals, `Rat` `Cat` `Dog` and `Fish`, and you want to serialize/deserialize these animals. Each has its own `serialize()` method. That all works fine and good, if you want to save your Cat to a file, you call `Cat.serialize()` and then you write it to a file.
But what about deserializing? Sure, you could save an extra bit of data that states the type of animal, then use reflection to get a static method (say, `deserialize(String serialized)`) and then invoke it. But that's not safe. What if someone creates a new animal 'Rabbit' and doesn't include a `deserialize(String serialized)` method? Sure, you could then just catch the error and ignore the issue, but that seems unclean and bad practice.
You could also create an enum. Each item in the enum must have a `deserialize(String serialized)` method, and the aforementioned piece of data that states the type references the name of its enum item. Problem is, not very adaptable. Enums don't allow for other animals to be added at runtime.
The way I have been solving this issue is mapping the name of the objects against a deserializer object. Basically each animal would have to 'register' itself by entering it's name and deserializer (implements `Deserializer` interface) object into a HashMap. The deserializer object can then be retrieved via the name of the animal at a later time.
My question is, what is the best method to go about implementing deserialization? Also, is the method I have been using good/bad practice?
Finally, if you are wondering why animals would be added at runtime, the reason is because animals might be added by other non accessible parts of the program, or by things such as plugins.
Example of the method I have been using is below.
Animal Interface
Java Code:
public class Animal{ public String serialize(); } mh_sh_highlight_all('java'); Deserializer Interface
[code]....
And when you needed to deserialize:
Java Code:
Deserializer d=AnimalSpecies.getSpeciesDeserializer(serialized.split(AnimalSpecies.DELIMITER)[0]); if (d!=null){ d.deserialize(serialized); } mh_sh_highlight_all('java');
What I mean by this is that any serialized Animal must have a way of identifying which animal it is so that it's deserializer can be accessed. This can be worked around by implementing a wrapper that adds this information directly before it is written to a file, and removes it directly before deserialization.
Why not use built in serialization/deserialization? I would like the serialized data to be readable and easily editable.
What I want to do is to deserialize the Java object which is contained within the <Character> element. (The first four characters "aced" reveals that we are dealing with serialized content. So far so good.) I'm using this code to grab the characters within <Character> and deserialize them into a Java object:
Node characterElement = responsesElementChildren.item(0); // <Character> String characterSerialized = characterElement.getTextContent(); ByteArrayInputStream bais = new ByteArrayInputStream( characterSerialized.getBytes() ); ObjectInputStream ins = new ObjectInputStream( bais ); objects.Character retrievedCharacter = (objects.Character) ins.readObject();
However, the above operation fails and I get this exception:
java.io.StreamCorruptedException: invalid stream header: 61636564 at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) at network.requests.RequestRetrieveCharacter.addResponse(RequestRetrieveCharacter.java:99) at network.GameServer.ask(GameServer.java:151) at Client.main(Client.java:43)
I cannot tell if the received serialized data is okay or not, so I really don't know if the problem is here in the deserialization or actually in the serialization (on the sending side where the Java object is serialized and packed into an XML message).
In my code I read in a file of states and statecapitals then store them into a hashmap. I then ask the user what the capital is for the random state displayed.The problem I am having is getting the value for the random generated state. When I enter the correct capital for the state, it is still being marked incorrect. Here is my code.
Java Code: try {
Scanner scanner = new Scanner(file); String[] values;
Map<String,String> componentValueMap = new HashMap<String,String>(); Map<String,Map<String,String>> componentNameValueMap = new HashMap<String,Map<String,String>>();
I have for loop which are getting values from XML
XML structure as <Raj> <user>raj</user> <password>123</password> </Raj> <Dazy> <user>dazy</user> <password>123</password> </Dazy>
Now during first loop it will put user and password in map and after that put map refernce in another map. Same procedure for another values. But during iterating componentNameValueMap , i am getting Raj, Dazy as Key but not getting different values for them. I am getting latest values of Dazy in both Keys.
Because put method of Map<String,String> componentValueMap is replacing values. But I don't to replace them and want to get different values for different keys.
I am trying to retrieve a object from a hashMap not I am not sure what is wrong. I am trying to calculate if a car was speeding. They're 5 cameras and as they pass each camera I can calculate the speed. They key is camera number and I am sending in a Vehicle object.
Now I am trying to retrieve variables from the Vehicle so I can do the calculations. I am getting the error in the loop in void calculateSpeeding(). The loop is only for testing at the moment.
package online.practice.averageSpeed; import java.util.Arrays; import java.util.HashMap; public class Vehicle { String licensePlates;
I have a hashmap of the form HashMap <String, Set<String>>I am trying to create a method with one argument. The argument is a key for the hashmap, if it exists it should print out the key and the associated values. I'm falling over at even getting it to print the key, it keeps printing all the keys from within the hashmap as I don't know how to load the argument into it. I have this so far
Java Code:
public void printValue(String club) { boolean result = clubMap.containsKey(club); if (result) { String key = clubMap.keySet(club).toString(); System.out.println(key );
I am asked in my assignment to make a program that accepts a text file as an example a novel and i have to sort each word as a PERSON or ORGANIZATION or LOCATION or O as in Other , example :
Microsoft/ORGANIZATION ,/O Nelly/PERSON !/O '/O
Now we notice that microsoft is and organitzation and "," is Other and Nelly is a person's name and so on ..
Now I am asked to return the numbers of tags in the text which is 4 in our case because we have (ORGANIZATION,PERSON,LOCATION,OTHER)
My question here is my logic true ? And since i made a map of String,String ; Is there any way that i can get the size of the values in our case the values are the organization etc.. ?
I have one doubt.In HashMap if keys contains 1,2,3,4 and values are a,b,c,d we can get values using get(key) method like 1 will A,2 will return B and so on. Can we get the keys from values like A will get 1 and also if in key if there is a String like 1,2,3,Z and value is A,B,C,7 Z should get me 7. Here I am not using any generics.
SO my current code creates a graph with vertices and weighted edges. This data is stored in a hashmap. The key of the hashmap is the vertex and the value is a second hashmap. This second hashmap contains the edges with the vertex it connected to as the key and the weight as the value. My current problem is that when i try to remove vertices they are removed from the key set but they stay in the value(the second hashmap) as the key for that hashmap. IS THERE A WAY TO REMOVE THE VERTEX FROM THE KEYSET OF THE SECOND HASHMAP.
Code is as follows
constructor{ adjacencyMap = new HashMap<V, HashMap<V, Integer>>(); dataMap = new HashSet<V>(); } removal method{ if(dataMap.contains(vertex)){
my project flow is html,css,js<--->ajax<-->jsp<--->jdbc(.java)<--->mysql. In that jdbc i am returning the records from the database and fill into the resultset. From the resultset i put all records in arraylist and passed to jsp then i am displaying data in the screen.Whether i can use arraylist, hashmap or treetable?
I have a a hashmap in request attribute which is available to jsp file where i have a dropdown. Hashmap kay= value of this dropdown. As and when I select CLT i want to perform some opertation depending on value associated with that key in hashmap.
I have a HashMap returned from the server. There are two conditions
1. HashMap returned with only one set of key value pair or
2. HashMap with multiple set of data key value pairs.
Now in UI I have to display either text box or drop down box depending upon the size of map for that I am using length method
Java Code:
<c:choose> <c:when test="${fn:length(myDto.mayMapInDto) eq 1}"> display text box </c:when> <c:otherwise> display drop box </c:otherwise> </c:choose> mh_sh_highlight_all('java');
I can display drop box by looping but not sure how I can get only one element for text box. Tricky is I can't use key value to access since UI don't know what key will be returned.
So I just want to store a Key in a HashMap which can related to two values. For example, the Key "ABC" related to "Fire" which in turn relates to "Heat".
My perfect idea is to have a Hashmap that would increase size each Key & value added, it's almost like a self-increasing array. I mean I could just create a very large Hashmap for me to add objects to anytime I want with a key to be able to find the object. Is this the most efficient way, because I'm trying to make my Object Library compatible with any amount of Objects, however, I know there's a limit to how many values you can have in an array, but it's larger than I'll ever need.
Let's say I'm making a number storage program, and I may need from 3 to 8 numbers to be stored with a key to find them easily using a Hashmap, rarely I may need below 3 or above 8. So is it efficient for me to create a Hashmap that has 10 placeholders? Or can I make this more efficient. Note, my Library is static.
I want to write a method to print the all the names of a phone book. phoneBook is a HashMap<String, String> , that has names as keys and phone numbers as values.
Reading the documentation for both HashMap and Set, I have more or less an idea of how it could be done but I cant put it on code..
This is wrong. It doesnt compile saying incompatible types. I was thinking first to manage to succeed to get a key from my phone book and then I change it to print all the keys.
I have some paired values stored as a hashmap in my model, for example sake, we'll say the 'key' is a Manager's ID and the 'value' is the name of their department, so 'betty123' could be a key to a value 'IT', and 'dave345' could be a key for the value 'Finance'. This hashmap is populated from a database. In my form, I have two "Select" dropdown fields, one for "Department" (with fields which match the values in the hashmap), and one for "Manager ID". I want to autopopulate the "Manager ID" field when the "Department" field is changed, based on the values in the Hashmap. I understand that I can't access dynamically elements of the hashmap in a script, so, for example, I can't do this:
var specificDepartment= $("#department"); var managerId = ${departmentHash[specificDepartment]}; $("#manager").val(managerId);
Because this code is dynamic based on the value of "department" at the time it's run, whereas the departmentHash object is generated when the page is loaded.
Is there some other way I can do this? Am I approaching it the wrong way? FWIW, I'm using Spring 4.1.1 and jQuery 1.8. I understand the conceptual block with code I wrote above, but I can't for the life of me think of an obvious solution although I'm sure this is a fairly commonplace problem in web development.
my query is like: "i want to create hashmaps where the inner hashmap contains the key as firstname and value as a Class Student which contains parameters firstname, lastname,etc. I need this hashmap to be accessed by other objects of different classes".
As we give the values by Scanner, it should be Stored in Hashmap and how those values can be accessed by other object classes?How does the Logic works? What my next step?
I have a file called statecapitals.txt that is read in, I want to store it in either a 2d array or hashmap and select a random state then Ask the user for the name of the capital. Then I want to Let them know if they are correct or not and have a choice to play as many times as they like. When they no longer want to play,I want to let them know how many they got correct and how many incorrect. I am not sure which would be better a hash map or 2d array and dont know where to start with each.
here is what the text file looks like:
Alabama - Montgomery Alaska - Juneau Arizona - Phoenix Arkansas - Little Rock California - Sacramento Colorado - Denver
I have a 2D array and the elements are listed as follows:
outlook temperature humidity windy gooutside sunny hot high false n overcast hot high false y ....
I need to put these values into a HashMap, where the elements of the first row are the keys and the elements from row 1 to n-1 are the values. What would be the best way to make sure the key and values are matched correctly?