在hashmap中放入各种类型的对象,他是否还能保存

smwias53s 2008-01-29 08:36:51
HashMap map = new HashMap();
在map中用put方法,放进去了,类的对象,整型,和字符串.读取的时候还是原来的类型吗,怎么读取.是菜鸟,详细说说
...全文
3097 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
maodie007 2008-01-29
  • 打赏
  • 举报
回复
private static void map () {
Map map = new HashMap();
map.put("str", ""); // 放String
map.put("int", 1); // 放int
map.put("long", new Long(123456)); // 放Long

String str = (String) map.get("str");// 取String
int i = (Integer) map.get("int");// 取int
Long l = (Long) map.get("long");// 取Long

}


你还是仔细好好想想吧,
map.put("str", "");// 放String
这里你放进去的是什么类型?String 对吗 ?
那么你再取出来
map.get("str");// 取String
你得到的是什么类型?是String吗?你自己也知道不是,所以来了个强制转换
也就是你放进去的是String取出来的是object了
幸好你的put是你自己认为可以设定的,要是在真正程序里,根据不同情况返回不同类型的对象,我看你那个强制转换的括号里放什么东西!
shan1119 2008-01-29
  • 打赏
  • 举报
回复
根据你put时的key来判断你放的数据是什么类型的.
取得的时候再使用类型转换.

就是说你必须知道map里的数据是什么样子的.
olivesoup 2008-01-29
  • 打赏
  • 举报
回复
如果用范型的话就写成这样

Map<String, Object> map = new HashMap<String, Object>();
olivesoup 2008-01-29
  • 打赏
  • 举报
回复
楼上的回答真是牛头不对马嘴...

map中能够放入混合类型,对于map来说,放的就是object类型,读取出来的当然也就是object类型了
需要你自己进行转型

private static void map () {
Map map = new HashMap();
map.put("str", ""); // 放String
map.put("int", 1); // 放int
map.put("long", new Long(123456)); // 放Long

String str = (String) map.get("str");// 取String
int i = (Integer) map.get("int");// 取int
Long l = (Long) map.get("long");// 取Long

}

maodie007 2008-01-29
  • 打赏
  • 举报
回复
容器是一个打染缸,进去的黑,白,花猫出来后都是白猫
所以最普通的判断就是一一用instanceof判断对象到底属于哪个类型
但这样很繁琐
但是Visitor模式华丽的解决了这个问题
yuanqingfei 2008-01-29
  • 打赏
  • 举报
回复
大哥,你这样是不行的,要保存类型信息,用泛型啊

HashMap<Integer, String> map = new HashMap<Integer, String>();

基本上,象这样就可以了。
yuzuru 2008-01-29
  • 打赏
  • 举报
回复
1、理论上,可以在一个Map里放任意的Object。
2、在一个Map里放任意的Object的话,没什么意义,基本上没有这么用的。
3、非要用的话,还想随意取值,自己研究一下java.lang.reflect包里的类。
枫叶rain 2008-01-29
  • 打赏
  • 举报
回复
map.put(key,value)
你放进去时,有一个key,一个value,是映射
你可以put进去任何东西的,只要用map.get(key)就能取出相应的值
下面是一个小的例子:
import java.util.*;

class HashMapDemo {
public static void main(String args[]) {

// Create a hash map.
HashMap<String, Double> hm = new HashMap<String, Double>();

// Put elements to the map
hm.put("John Doe", new Double(3434.34));
hm.put("Tom Smith", new Double(123.22));
hm.put("Jane Baker", new Double(1378.00));
hm.put("Tod Hall", new Double(99.22));
hm.put("Ralph Smith", new Double(-19.08));

// Get a set of the entries.
Set<Map.Entry<String, Double>> set = hm.entrySet();

// Display the set.
for(Map.Entry<String, Double> me : set) {
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}

System.out.println();

// Deposit 1000 into John Doe's account.
double balance = hm.get("John Doe");
hm.put("John Doe", balance + 1000);

System.out.println("John Doe's new balance: " +
hm.get("John Doe"));
}
}
程序运行结果:

C:\test>java HashMapDemo
Ralph Smith: -19.08
Tom Smith: 123.22
John Doe: 3434.34
Tod Hall: 99.22
Jane Baker: 1378.0

John Doe's new balance: 4434.34

志言志语 2008-01-29
  • 打赏
  • 举报
回复
现在范型不是已经解决这个问题了吗? 你在往里放的时候,可以规定好数据类型,如果你需要存放的数据有多种类型那就创建多个map对象好了,为什么非要放一块呢?
cangyue87 2008-01-29
  • 打赏
  • 举报
回复
集合中最好放同一类型的对象....

如果楼主的情况允许,可以考虑用一个类来代替集合....
maodie007 2008-01-29
  • 打赏
  • 举报
回复
Java 的Collection(包括Vector 和Hashtable)是我们最经常使用的技术,可是Collection
好象是个黑色大染缸,本来有各种鲜明类型特征的对象一旦放入后,再取出时,这些类型就消
失了.那么我们势必要用If 来判断,如:

Iterator iterator = collection.iterator()
while (iterator.hasNext()) {
Object o = iterator.next();
if (o instanceof Collection)
messyPrintCollection((Collection)o);
else if (o instanceof String)
System.out.println("'"+o.toString()+"'");
else if (o instanceof Float)
System.out.println(o.toString()+"f");
else
System.out.println(o.toString());
}


上面载自《设计与模式》一书,至于如何用visitor模式来完成相同效果
网上很多关于这模式的代码,起始JDK的API文档就已经清楚的说明了!

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧