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);
}
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; }