Java 内部哈希表覆盖
我正在处理哈希表。在这个哈希表中,我想要形成哈希表,但是我的外部哈希表的值被替换了 哈希表1[键,哈希表[键,值]] 我可以在不覆盖的情况下获取外部哈希表键,但可以替换内部哈希表值Java 内部哈希表覆盖,java,string,hashmap,Java,String,Hashmap,我正在处理哈希表。在这个哈希表中,我想要形成哈希表,但是我的外部哈希表的值被替换了 哈希表1[键,哈希表[键,值]] 我可以在不覆盖的情况下获取外部哈希表键,但可以替换内部哈希表值 import java.io.*; import java.util.*; import com.sridhar.util.*; public class MyTokenizerDemo { public static void main(String[] args) throws IOExceptio
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);
}
import java.io.*;
导入java.util.*;
导入com.sridhar.util.*;
公共类MyTokenizerDemo
{
公共静态void main(字符串[]args)引发IOException
{
Hashtable ht=新的Hashtable();
Hashtable ht1=新的Hashtable();
Hashtable ht2=新的Hashtable();
文件f=新文件(“E:/rum/format.txt”);
FileReader fr=新的FileReader(f);
BufferedReader br=新的BufferedReader(fr);
字符串s;
而((s=br.readLine())!=null)
{
ArrayList aList=(ArrayList)StringUtils.myTokenizer(“~!~”);
对于(int i=0;i修改代码的linht1.put(aList1.get(0),ht2);
asht1.put(aList1.get(i),ht2);
调用asList1时,get(0)always键将相同,因此您的数据将被覆盖我在这里犯了一个简单的错误!!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);
}
import java.io.*;
导入java.util.*;
导入com.sridhar.util.*;
公共类MyTokenizerDemo
{
公共静态void main(字符串[]args)引发IOException
{
Hashtable ht=新的Hashtable();
Hashtable ht1=新的Hashtable();
Hashtable ht2=新的Hashtable();
文件f=新文件(“E:/rum/format.txt”);
FileReader fr=新的FileReader(f);
BufferedReader br=新的BufferedReader(fr);
字符串s;
而((s=br.readLine())!=null)
{
ArrayList aList=(ArrayList)StringUtils.myTokenizer(“~!~”);
对于(int i=0;ioops!!我的密钥正在正确更改,但我无法获取密钥,ht2的值将被正确覆盖…同样的逻辑也适用于那里,您需要将字符串innerkey=(String)更改为.get(0);字符串innervalue=(String)as.get(1);将字符串innerkey=(String)as.get(j);字符串innervalue=(String)as.get(j+1);看在James Gosling的份上,停止使用Hashtable,开始使用泛型。这段代码大约在2004年就过时了。cool brian:)在此,我肯定会这样做:)我建议您使用参数化泛型类型和增强型For循环。