Query about the Hashtable

Please help me out with the Hashtable problem.

Hashtable maps one KEY with ONE value.

like
Hashtable numbers = new Hashtable();

numbers.put("1", new Integer(1));
numbers.put("2", new Integer(2));
numbers.put("3", new Integer(3));
numbers.put("4", new Integer(4));

My problem is -- how to map multiple value with singlt KEY

numbers.put("1", new Integer(1));
numbers.put("1", new Integer(2));
numbers.put("1", new Integer(3));
numbers.put("2", new Integer(4));
numbers.put("2", new Integer(1));
numbers.put("2", new Integer(2));
numbers.put("3", new Integer(3));
numbers.put("4", new Integer(4));

How to keep the multiple value with singl  KEY... if any one has some code.

--------------------------------------------------

Simply saying, you can't

Read the doc of put, it result the previous value of the key if exists else null.

But you can solve it in different way.

You were trying to do this.

numbers.put("1", new Integer(1));
numbers.put("1", new Integer(2));
numbers.put("1", new Integer(3));
numbers.put("2", new Integer(4));
numbers.put("2", new Integer(1));
numbers.put("2", new Integer(2));
numbers.put("3", new Integer(3));
numbers.put("4", new Integer(4));

Now you do this,

Numbers.put ("1", new MyNumber(new Integer(1), new
Integer(2), new
Integer(3)));

Means, you create a class MyNumber and encapsulate the other three values in it and put this MyNumber class as a value of the key "1"..

Give Me J

Sanjeev

--------------------------------------------------

You could also use an array of objects:

final int limit = 4;
Map A = new Hashtable();
Integer[] B = new Integer[limit];
B[0] = new Integer(8);
B[1] = new Integer(8);
B[2] = new Integer(8);
B[3] = new Integer(8);
A.put("Integers" , B);

Depends on the application for which you are trying to use this.

Vinay.

--------------------------------------------------

I tryed your code but get the error--

[Ljava.lang.Integer;@1cde100

Where I am wrong plz tell me.

final int limit = 5;
Map A = new Hashtable();
Integer[] B = new Integer[limit];
B[0] = new Integer(8);
B[1] = new Integer(8);
B[2] = new Integer(8);
B[3] = new Integer(8);
A.put("Integers" , B);

System.out.println(A.get("Integers"))     ;

Ashish Mishra

--------------------------------------------------

This is not the error, actually the code is just printing the Integers array (System.out.println(A.get("Integers"))). Since the toString() method of the array is not overridden its not printing the values in the hashtable. I guess its just returning the address space of the object.

Saurabh Gupta

--------------------------------------------------

Actually your trying my code and not Sanjeev's. Take a look down the chain, you will find out. Sanjeev recommended writing a different class, which has its own advantages. I recommended you to use an array instead of a whole new class.

You might have got an error because the get method returns an Object but "Integers" which you put in the HashTable is an array of Objects. Solution is simple:

just typecast.

Here is a sample code wiothout any errors (pls refine it, its a mess)

final int limit = 4;
Map A = new Hashtable();
Integer[] B = new Integer[limit];

B[0] = new Integer(8);
B[1] = new Integer(8);
B[2] = new Integer(8);
B[3] = new Integer(8);
A.put("Integers" , B);
System.out.println(B);
A.put("Integers" , B);

Object[] B2 = (Object[])A.get("Integers");
for(int i = 0; i< B2.length ;i++)
    System.out.println(B2[i]);

Vinay.

--------------------------------------------------

I've removed one line in the code which is not necessary and another minor change (doesn't make any difference to the way it works here)

final int limit = 4;
Map A = new Hashtable();
Object[] B = new Integer[limit];
B[0] = new Integer(8);
B[1] = new Integer(8);
B[2] = new Integer(8);
B[3] = new Integer(8);

A.put("Integers" , B);

Object[] B2 = (Integer[])A.get("Integers");

for(int i = 0; i< B2.length ;i++)
   System.out.println(B2[i]);

Vinay.

--------------------------------------------------

I think the following code will work for you.  I am not compiled the code but this will give some idea for resolving your issue.I think this will work.

// Keep all the values of a particular key in a ArrayList and
// put that key and ArrayList in your hash table.
Hashtable ht = new Hashtable();
// For Key 1
ArrayList list1 = new ArrayList();
list1.append(new Integer(1));
list1.append(new Integer(2));
list1.append(new Integer(3));
// For Key 2
ArrayList list2 = new ArrayList();
list2.append(new Integer(3));
list2.append(new Integer(1));
list2.append(new Integer(2));
// For Key 3
ArrayList list3 = new ArrayList();
list3.append(new Integer(3));
list3.append(new Integer(4));
list3.append(new Integer(1));
// For Key 4
ArrayList list4 = new ArrayList();
list4.append(new Integer(2));
ht.put("1", list1);
ht.put("2", list2);
ht.put("3", list3);
ht.put("4", list4);

Varma Srivatsavaya

Do you have a Java Problem?
Ask It in The Java Forum

Java Books
Java Certification, Programming, JavaBean and Object Oriented Reference Books

Return to : Java Programming Hints and Tips

All the site contents are Copyright © www.erpgreat.com and the content authors. All rights reserved.
All product names are trademarks of their respective companies.
The site www.erpgreat.com is not affiliated with or endorsed by any company listed at this site.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
 The content on this site may not be reproduced or redistributed without the express written permission of
www.erpgreat.com or the content authors.