Hashmap Slower After Deserialization?

Feb 15, 2015

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.

View Replies


ADVERTISEMENT

Implementing Deserialization Of Objects?

Jul 16, 2014

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.

View Replies View Related

I/O / Streams :: Deserialization Of Class Object Received Within XML Message

Apr 5, 2014

I receive an XML message (over an HttpURLConnection) that contains a serialized Java object. This is the received XML message:

<?xml version="1.0" encoding="UTF-16"?><Olive><Responses><Character>
aced0005737200116f626a656374732e4368617261637465720000
0000000000000200034c00056974656d737400154c6a6176612f757

[Code] .....

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).

View Replies View Related

How To Get Value For Key In Hashmap

Sep 26, 2014

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;

[code]....

View Replies View Related

Add Key-Value Of One HashMap As Value In Another HashMAp

Jul 30, 2014

I have two Hasmaps as

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.

View Replies View Related

Getting Object From HashMap

Oct 23, 2014

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;

[Code] ....

View Replies View Related

Printing A Key And A Value From HashMap

Mar 28, 2014

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 );

[code]....

View Replies View Related

How To Find Particular Objects In HashMap

Dec 25, 2014

Suppose i have a hashMap which includes instances of class Employees and instances of class Customers.

How can i get the employees objects only?

And would it be possible to find the oldest staff by comparing the ages stored in the age fields of the staff objects.

View Replies View Related

HashMap / How To Get Size Of Value And NOT The Keys

Apr 5, 2014

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.. ?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;

[code].....

View Replies View Related

Getting Keys From Values In Hashmap

Feb 9, 2014

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.

View Replies View Related

How To Get Method Of HashMap Or Hashtable

Jul 25, 2014

How get method of HashMap or Hashtable works internally in Java can any body let me know how does it work..

View Replies View Related

Removing A Key From Hasmap Within Hashmap

Dec 1, 2014

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)){

[Code]...

View Replies View Related

Which Is Efficient Arraylist Or Hashmap

Jan 30, 2014

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?

View Replies View Related

JSP :: Iterating Hashmap Using Value Of Dropdown As Key

Jul 2, 2014

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.

View Replies View Related

Accessing HashMap With JSTL

Aug 18, 2014

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.

View Replies View Related

How To Store Three Variables In HashMap

Feb 10, 2014

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".

How can I code this in a HashMap?

View Replies View Related

Compile Error Using HashMap

Feb 9, 2015

I am a C# developer but need to do some java development. The code produces the following error.

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
...
HashMap<String, String > myMap = new HashMap<String, String>(){{
put("a","b");
}};
myMap.put("foo", "bar");
myMap.put("Sna", "foo");
...

Generates this error

C:/FSC/apache-tomcat-6.0.41/webapps/aspen/temp/x2_8656248460570782763/x2_5214718769032742331/StudentExport.java:47: error: <identifier> expected
myMap.put("foo", "bar");
^

What am I missing?

View Replies View Related

Object Library Hashmap

Jul 16, 2014

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.

View Replies View Related

How To Print Out All Keys Currently Stored In A HashMap

Jul 4, 2014

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..
 
public String getName()
{
  String[] keys = phoneBook.keySet().toArray();
return keys[0];
  }

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.

View Replies View Related

JSP :: Use Hashmap From The Model In Script On The Page?

Apr 11, 2015

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.

View Replies View Related

Create Hashmaps Where Inner Hashmap Contains Key As Firstname

Oct 24, 2014

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".

public class Student {
private String FirstName;
private String LastName;
private String EmailAddress;
private String PhoneNumber;
private String Username;
private String Password;
private String EducationalInstitution;

[code]....

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?

View Replies View Related

Difference Between Hashmap Linkedlist And Arraylist?

Jul 10, 2014

What are the difference between hashmap, linkedlist and arraylist ... when they are used and why?

View Replies View Related

HashMap Keys To String Array

Dec 21, 2014

I have the following hashMap declared:

private HashMap<String, Car> cars = new HashMap<String, Car>();

How can i get an array of String filled with hashMap keys?

View Replies View Related

How To Store A File In Hashmap Or 2D Array

Sep 25, 2014

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

[code]....

View Replies View Related

Which Two Method HashMap Key Object Should Implement

Jul 25, 2014

Which two method HashMap key object should implement?..

View Replies View Related

Putting Values From 2D Array To HashMap

Apr 9, 2014

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?

Here is what I have:

String[][] array = new String[numberOfRows][numberOfCols];
HashMap<String, String> map = new HashMap<String, String>();
for(int rows = 0; rows < (numberOfRows * numberOfCols); rows++) {
for(int cols = 0; cols < array[i].length; cols++} {
map.put(array[0][cols], array[rows*cols][col];
}
}

I keep getting the out of bounds error.

View Replies View Related







Copyrights 2005-15 www.BigResource.com, All rights reserved