2014-02-18 134 views
0

我正在研究哈希表。我想在其中形成哈希表,但我的外部哈希表的值被替换。内部哈希表覆盖

Hashtable1 [键,哈希表[键,值]

林抽到outerhashtable关键,而不会覆盖但要更换内部哈希表的值。

import java.io.*; 
import java.util.*; 
import com.sridhar.util.*; 

public class MyTokenizerDemo 
{ 
public static void main(String[] args) throws IOException 
{ 
    Hashtable ht=new Hashtable(); 
    Hashtable ht1=new Hashtable(); 
    Hashtable ht2=new Hashtable(); 
    File f = new File("E:/rum/format.txt"); 
    FileReader fr = new FileReader(f); 
    BufferedReader br = new BufferedReader(fr); 
    String s; 
    while((s=br.readLine())!=null) 
    { 
     ArrayList aList = (ArrayList)StringUtils.myTokenizer(s,"~!~"); 
     for(int i=0;i<aList.size();i++) 
     { 
      ArrayList aList1 = (ArrayList)StringUtils.myTokenizer((String)aList.get(i),"$#$"); 
      //System.out.println("==>"+aList1.get(0)+"<=="); 
      ArrayList aList2 = (ArrayList)StringUtils.myTokenizer((String)aList1.get(1),"~$~"); 
      //System.out.println("====>"+aList2+"<====="); 
      for(int j=0;j<aList2.size();j++) 
      { 
       ArrayList as = (ArrayList)StringUtils.MyTokenizer((String)aList2.get(j),"#$#"); 
       if(as!=null) 
       { 
       String innerkey = (String)as.get(0); 
       String innervalue = (String)as.get(1); 
       ht2.put(innerkey,innervalue); 
       } 
      } 
     ht1.put(aList1.get(0),ht2); 
     } 
    } 
    System.out.println(ht1); 
    } 

}

请让我自己串标化实用工具类的假设。

我的外部Hashtable值被覆盖。

帮我解决这个问题。

+0

对于James Gosling的爱,请停止使用Hashtable并开始使用泛型。这个代码已经过时了大约2004年。 –

+0

酷布莱恩:)hereon,肯定会这样做:) –

回答

0

当你调用asList1.get修改此林的代码ht1.put(aList1.get(0),ht2);ht1.put(aList1.get(i),ht2);

(0)总是关键是一样的,所以你的数据将被覆盖

+0

哎呀!我的密钥正在改变,但我无法获得密钥,正确的ht2值只会覆盖... –

+0

同样的逻辑也适用于那里,你需要改变字符串innerkey =(String)as.get(0); String innervalue =(String)as.get(1);字符串innerkey =(String)as.get(j); String innervalue =(String)as.get(j + 1); – Siva

0

我在这里做简单的错误! for循环内的实例化使值保持活动而不是覆盖!感谢所有!下面是代码!

import java.io.*; 
import java.util.*; 
import com.sridhar.util.*; 

public class MyTokenizerDemo 
{ 
public static void main(String[] args) throws IOException 
{ 
Hashtable ht=new Hashtable(); 
Hashtable ht1=new Hashtable(); 
Hashtable ht2=new Hashtable(); 
File f = new File("E:/rum/format.txt"); 
FileReader fr = new FileReader(f); 
BufferedReader br = new BufferedReader(fr); 
String s; 
while((s=br.readLine())!=null) 
{ 
    ArrayList aList = (ArrayList)StringUtils.myTokenizer(s,"~!~"); 
    for(int i=0;i<aList.size();i++) 
    { 
     ht2 = new Hashtable(); //Instantiating inside the loop makes to work perfect :) 
     ArrayList aList1 = (ArrayList)StringUtils.myTokenizer((String)aList.get(i),"$#$"); 
     //System.out.println("==>"+aList1.get(0)+"<=="); 
     ArrayList aList2 = (ArrayList)StringUtils.myTokenizer((String)aList1.get(1),"~$~"); 
     //System.out.println("====>"+aList2+"<====="); 
     for(int j=0;j<aList2.size();j++) 
     { 
      ArrayList as = (ArrayList)StringUtils.MyTokenizer((String)aList2.get(j),"#$#"); 
      if(as!=null) 
      { 
      String innerkey = (String)as.get(0); 
      String innervalue = (String)as.get(1); 
      ht2.put(innerkey,innervalue); 
      } 
     } 
    ht1.put(aList1.get(0),ht2); 
    } 
} 
System.out.println(ht1); 
} 
+0

我想建议您使用参数化泛型类型和增强for循环。 –

+0

是的,当然可以! :) –