日期:2014-05-20  浏览次数:20761 次

HashMap的奇怪问题
public   static   HashMap   parse(InputStream   in)   throws   Exception   {
HashMap   propertyMap   =   new   HashMap();
SAXReader   reader   =   new   SAXReader();
Document   document   =   reader.read(in);
Element   root   =   document.getRootElement();
Iterator   i   =   root.elementIterator( "windowId ");
while(i.hasNext())   {
Element   windowElement   =   (Element)   i.next();
Attribute   attribute   =   windowElement.attribute( "name ");
String   windowId   =   attribute.getStringValue();
List   propertyList   =   new   ArrayList();
for   (Iterator   j   =   windowElement.elementIterator(   "property "   );j.hasNext();){
Element   propertyElement   =   (Element)   j.next();
propertyList.add(propertyElement.getStringValue());
}
System.out.println(windowId);
for(int   k=0;k <propertyList.size();k++){
System.out.println(propertyList.get(k));
}
propertyMap.put(windowId,propertyList);
}
return   propertyMap;
}

从配置文件中读取每个windowId的property属性值,将windowId作为key,
该windowId的property组成的list为value,存进HashMap中,
从console输出的信息看,读取文件不存在任何问题,且每个windowId均不相同,为何存放了10次,而最后HashMap中只有8个呢?

------解决方案--------------------
顶你
------解决方案--------------------
ding
------解决方案--------------------
帮忙顶
------解决方案--------------------
樓主你把存放的值和輸出的值比較一下就知道了
會不會是有相同的值,然後只存放了一個。
------解决方案--------------------
好像HashMap不允许有相同的key。


------解决方案--------------------
存放第10个时会覆盖掉第8个,每次debug都这样
------解决方案--------------------
mark
------解决方案--------------------
那你用Hashtable测试下
相对于HashMap Hashtable是线程安全的
------解决方案--------------------
帮忙顶
------解决方案--------------------
可以把输入文件贴上来看下嘛
------解决方案--------------------
sysout(windowID);
------解决方案--------------------
你打印的值分不清哪个是windowID,每次输出windowID看看,应该是这个有重复,或者都是null值,否则不可能覆盖的。
------解决方案--------------------
靠,看清楚楼主的话再回答阿

System.out.println(windowId);
for(int k=0;k <propertyList.size();k++){
System.out.println(propertyList.get(k));
}
-------------------------------------------
============Gen0010XXXXX=============
materialName
averageSize
quantity
packagedForm
expectedDate
============Gen0020XXXXX=============
supplierDeliveryDate
orderNo
materialName
averageSize
orderAmount
unit
unitCost
amount
resultMessage
============Gen0030XXXXX=============
arrivalQuantity
markerLotNo
division
loss
orderNo
materialName
averageSize
orderAmount
unit
unitCost