主题:[讨论]Map的问题
各位大侠好,我有两段代码请各位帮忙看看:
第一段:
public class testHash
{
//创建一个映射表
Map phoneBook=new HashMap();
//类testHash的构造函数,参数是两个数组,形成键-值对
public testHash(String[] numbers,String[] names)
{
for(int i=0;i<numbers.length;i++)
{
//把两个数组中的对应元素放入映射表中
phoneBook.put(numbers[i],names[i]);
}
}
public static void main(String[] args)
{
//准备数据
String[] names={"Jack","John","Rose","Hanlun"};
String[] numbers={"1234","2345","3456","4567"};
//创建实例
testHash ex=new testHash(numbers,names);
//输出表中内容
System.out.println("Map: "+ex.phoneBook);
//返回映射表的视图集
Set s=ex.phoneBook.entrySet();
//利用迭代器遍历视图集的内容
for(Iterator i=s.iterator();i.hasNext();)
{
Map.Entry me=(Map.Entry)i.next();
Object ok=me.getKey();
Object ov=me.getValue();
System.out.println("object:"+me);
System.out.println("key:"+ok+"\t");
System.out.println("value:"+ov);
}
}
}
这段程序运行正常,但由于我用的是JDK5,在编译时出现了有不安全隐患的提示了。但可以输出正确的结果。
我试着改了一下程序,就是第二个程序:
public class testHash
{
//创建一个映射表
HashMap phoneBook=new HashMap();
//类testHash的构造函数,参数是两个数组,形成键-值对
public testHash(String[] numbers,String[] names)
{
for(int i=0;i<numbers.length;i++)
{
//把两个数组中的对应元素放入映射表中
phoneBook.put(numbers[i],names[i]);
}
}
public static void main(String[] args)
{
//准备数据
String[] names={"Jack","John","Rose","Hanlun"};
String[] numbers={"1234","2345","3456","4567"};
//创建实例
testHash ex=new testHash(numbers,names);
//输出表中内容
System.out.println("Map: "+ex.phoneBook);
//返回映射表的视图集
Set s=ex.phoneBook.entrySet();
//利用迭代器遍历视图集的内容
for(Iterator i=s.iterator();i.hasNext();)
{
Map.Entry me=(Map.Entry)i.next();
Object ok=me.getKey();
Object ov=me.getValue();
System.out.println("object:"+me);
System.out.println("key:"+ok+"\t");
System.out.println("value:"+ov);
}
}
}
这段代码与第一段代码不同的是在代码段的第三行,我把Map改成了HashMap,即phoneBook这时是HashMap类对象,这时却出错了,在编译时出现,说构造函数里的“put”方法找不到。这是怎么回事。Map和HashMap中的put方法难道不是一回事呢?
谢谢各位大侠!
第一段:
public class testHash
{
//创建一个映射表
Map phoneBook=new HashMap();
//类testHash的构造函数,参数是两个数组,形成键-值对
public testHash(String[] numbers,String[] names)
{
for(int i=0;i<numbers.length;i++)
{
//把两个数组中的对应元素放入映射表中
phoneBook.put(numbers[i],names[i]);
}
}
public static void main(String[] args)
{
//准备数据
String[] names={"Jack","John","Rose","Hanlun"};
String[] numbers={"1234","2345","3456","4567"};
//创建实例
testHash ex=new testHash(numbers,names);
//输出表中内容
System.out.println("Map: "+ex.phoneBook);
//返回映射表的视图集
Set s=ex.phoneBook.entrySet();
//利用迭代器遍历视图集的内容
for(Iterator i=s.iterator();i.hasNext();)
{
Map.Entry me=(Map.Entry)i.next();
Object ok=me.getKey();
Object ov=me.getValue();
System.out.println("object:"+me);
System.out.println("key:"+ok+"\t");
System.out.println("value:"+ov);
}
}
}
这段程序运行正常,但由于我用的是JDK5,在编译时出现了有不安全隐患的提示了。但可以输出正确的结果。
我试着改了一下程序,就是第二个程序:
public class testHash
{
//创建一个映射表
HashMap phoneBook=new HashMap();
//类testHash的构造函数,参数是两个数组,形成键-值对
public testHash(String[] numbers,String[] names)
{
for(int i=0;i<numbers.length;i++)
{
//把两个数组中的对应元素放入映射表中
phoneBook.put(numbers[i],names[i]);
}
}
public static void main(String[] args)
{
//准备数据
String[] names={"Jack","John","Rose","Hanlun"};
String[] numbers={"1234","2345","3456","4567"};
//创建实例
testHash ex=new testHash(numbers,names);
//输出表中内容
System.out.println("Map: "+ex.phoneBook);
//返回映射表的视图集
Set s=ex.phoneBook.entrySet();
//利用迭代器遍历视图集的内容
for(Iterator i=s.iterator();i.hasNext();)
{
Map.Entry me=(Map.Entry)i.next();
Object ok=me.getKey();
Object ov=me.getValue();
System.out.println("object:"+me);
System.out.println("key:"+ok+"\t");
System.out.println("value:"+ov);
}
}
}
这段代码与第一段代码不同的是在代码段的第三行,我把Map改成了HashMap,即phoneBook这时是HashMap类对象,这时却出错了,在编译时出现,说构造函数里的“put”方法找不到。这是怎么回事。Map和HashMap中的put方法难道不是一回事呢?
谢谢各位大侠!