遍历Map的两种方法:keySet()和entrySet() 以及ArrayList的toArray

keySet是的集合,Set里面的类型即key的类型
entrySet是 键-值 对的集合,Set里面的类型是Map.Entry

1.keySet()
Map map=new HashMap();
Iterator it=map.keySet().iterator();
Object key;
Object value;
while(it.hasNext()){
key=it.next();
value=map.get(key);
System.out.println(key+":"+value);
}

2.entrySet()

Map map=new HashMap();
Iterator it=map.entrySet().iterator();
Object key;
Object value;
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
key=entry.getKey();
value=entry.getValue();
System.out.println(key+"="+value);
}

keySet是键的集合,Set里面的类型即key的类型
entrySet是 键-值 对的集合,Set里面的类型是Map.Entry
keySet()的速度比entrySet()慢了很多
使用entrySet则必须将map对象转换为Map.Entry,keySet则不需要

如果要把一个List直接转化为Object数组,则可以直接使用Object[] o = list.toArray();

如果要转化为String数组,则有以下两种方式:

方法一、String[]  arr = new String[list.size];  list.toArray(arr);//此时arr就有了list中的值了

方法二、String[] arr = (String[])list.toArray(new String[0])


List list = new ArrayList();
   list.add(new Person());
   list.add(new Person());
   list.add(new Person());
   Person[] person = (Person[]) list.toArray();

运行程序会抛出异常:java.lang.ClassCastException

但运行如下代码:

List list = new ArrayList();
   list.add(new Person());
   list.add(new Person());
   list.add(new Person());
   Person[] person = (Person[]) list.toArray(new Person[0]);

程序正确执行,

原因,先看ArrayList的两个toArray()方法的源代码:

public Object[] toArray() {
    Object[] result = new Object[size];
    System.arraycopy(elementData, 0, result, 0, size);
    return result;
}
public Object[] toArray(Object a[]) {
    if (a.length < size)
        a = (Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size);
    System.arraycopy(elementData, 0, a, 0, size);
    if (a.length > size)
        a[size] = null;
    return a;
}

可以看出,不带参数的toArray方法,是构造的一个Object数组,然后进行数据拷贝,此时进行转型就会产生ClassCastException而带参数

的toArray方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以Object数组

的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常。

那么,对于不带参数的toArray方法,它有什么特殊意义呢?还是用代码说话:

ArrayList list = new ArrayList();
list.add(new Person());
list.add(new Person());
list.add(new Person());
//这里不需要转型,也不能使用转型
 Object[] ss = list.toArray();
//这里可以进行转型,取出原ArrayList里面存放的对象
for (int i = 0; i < ss.length; i++){
Person person= (Person) ss[i];
System.out.println(person);
}
是说,如果用toArray,需要自己“手工”“逐个”进行类型转换。


以下是在自己使用时写:
var newData={  } ; 
function getFormData(newData){
    var formDatas = {};
	<% 
		Map<String,String> formidMap_new=new HashMap<String,String>();
		formidMap_new=(HashMap<String,String>)session.getAttribute("formid_B");
		 String[] keys_b_new=formidMap_new.keySet().toArray(new String[0]);
		 for(int i=0;i<keys_b_new.length;i++){
			 %>
			 var key='<%=keys_b_new[i]%>';
//			 console.log(key);
			  var row = new Object();    
             var jsValue = $('#<%=keys_b_new[i].substring(21,keys_b_new[i].length())%>').html();
			 if(jsValue != undefined){
				jsValue = jsValue.replace("<br>","").replace("</br>","").replace("<BR>","").replace("</BR>","")
			 } 
			 var mapKey="<%=keys_b_new[i].substring(21,keys_b_new[i].length())%>";
             newData[mapKey]=jsValue;
             formDatas[key]=jsValue;	
			/* if(key.indexOf("B1_D6")>0){
				 alert( newData[mapKey]+"NEW55");
			 }
			 */
			 //console.log(jsdataMap[key]);//结果是1.	
			 <%	  
		 }
		 %>
		 return formDatas;
	}




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值