javamap复制
① java map中怎么通过键取出值
在java map中取出键值有以下两种方法:
1.第一种方法根据键值的名字取值
import java.util.HashMap;
import java.util.Ma
ublic class Test {
public static void main(String[] args)
{ // TODO Auto-generated method stub
Map<String, Object> map=new HashMap<String, Object>();
map.put("id", "sunny");
map.put("value", "syl");
System.out.println(map.get("id"))
System.out.println(map.get("value")); }
2.第二种方法:遍历
import java.util.HashMap;
import java.util.Map;
import java.util.Set
ublic class Test {
public static void main(String[] args)
{
Map<String, Object> map=new HashMap<String, Object>();
map.put("id", "sunny");
map.put("value", "syl");
Set<String> get = map.keySet();
for (String test:get)
{
System.out.println(test+","+map.get(test));
} }
② Java中,复制一个对象,有什么好的方法
使用Java的反射机制实现:为了能更好的区分,写成了两个类,可以运行下面的代码看看效果
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) throws Exception {
Customer1 c1 = new Customer1();
c1.setName("c1");
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
c1.setList(list);
Map<String,String> map = new HashMap<String, String>();
map.put("map1", "map1");
map.put("map2", "map2");
c1.setMap(map);
Customer2 c2 = new Customer2();
//
Class c = c1.getClass();
Class class2 = c2.getClass();
Field fields[] = c.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getMethodName = "get" + firstLetter + fieldName.substring(1);
String setMethodName = "set" + firstLetter + fieldName.substring(1);
Method getMethod = c.getMethod(getMethodName, new Class[] {});
Method setMethod = class2.getMethod(setMethodName,
new Class[] { field.getType() });
Object value = getMethod.invoke(c1, new Object[] {});
setMethod.invoke(c2, new Object[] { value });
}
System.out.println(c2.getName());
System.out.println(c2.getList());
System.out.println(c2.getMap());
}
}
class Customer1 {
private String name;
private List<String> list;
private Map<String, String> map;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}
class Customer2 {
private String name;
private List<String> list;
private Map<String, String> map;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}
③ java中如何使用map存取数据
java中使用map存取数据的方法如下:
1、需要指定其中的K,V;k=keyv=value。
④ java Map复制的问题
你指的是对get出来的Set对象执行add方法吗?
使用put方法,是将同样的对象从popSizeChoice放到MpopSizeChoice中,两个map是两个不同的引用,但是里面保存的对象还是指向同一个引用。所以调用add方法对这个同一个对象进行add的时候,两个map里都会更新。
要解决这个办法,map里存放的set也必须new一个新的,然后调用putAll方法得到一个拷贝。
⑤ java中怎么样将方法中的map内数据保存以便在下次调用时继续使用
你可以把这个map定义为类成员,如果是通过静态方法向map里面加东西,那就定义为静态成员。总之,定义为方法内的局部变量是肯定不行的,因为它的作用域是方法内,执行一次方法后,这个map变量的生命周期就到了,下次再调用的时候,是产生一个新的map。(java不像c,c++,没有局部静态变量)
⑥ java中map集合能不能存另两个集合
java中map集合能放另外两个集合,主要是使用map的putall集合,加入另一个集合,如下代码回:
importjava.util.HashMap;
importjava.util.Map;
publicclassceshi{
答publicstaticvoidmain(String[]args){
Mapmap1=newHashMap();
map1.put("key1","values1");
Mapmap2=newHashMap();
map2.put("key2","values2");
Mapmap3=newHashMap();//将前两个map放入map3中
map3.putAll(map1);//加入map1
map3.putAll(map2);//加入map2
System.out.println(map3);//输出结果
}
}
运行结果如下:
⑦ java Map深度复制问题
这里的pos是基础类型,不是引用类型,不需要拿出来单独复制,浅clone就可以了,但是attr这个map需要进行深度复制,因为这个是引用类型,复制后的对象修改该属性依然会影响源对象
clone方法可以简单写为
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Elem elem = (Elem) super.clone();
Map<String, String> tempMap = new HashMap();
for (Entry<String, String> e : this.map.entrySet()) {
/**
* 这里的new String(e.getValue())可以直接用e.getValue()代替,
* 写在这里仅仅是提醒当value是其他对象时需要做下处理,比如一个User对象,如果你直接写成
* tempMap.put(e.getKey(), e.getValue());那么肯定是没什么用的,而要写成
* tempMap.put(e.getKey(), e.getValue().clone());
*/
tempMap.put(e.getKey(), new String(e.getValue()));
}
elem.map = tempMap;
return elem;
}
⑧ 有没有类似BeanUtils.Properties实现Map和Bean之间的复制
使用Spring 的BeanWrapper来实现从map 设置到bean
T obj = (T) BeanUtils.instantiateClass(type);
BeanWrapper beanWrapper = new BeanWrapperImpl(obj);
beanWrapper.setPropertyValues(m);
反过来,可能需要自己写
BeanWrapper beanWrapper = new BeanWrapperImpl(obj);
PropertyDescriptor[] descriptor = beanWrapper.getPropertyDescriptors();
for (int i = 0; i < descriptor.length; i++) {
m.put(descriptor[i].getName,beanWrapper.getPropertyValue(name));
}
⑨ Java中map动态赋值的问题
把建立map放在循环内,你的做法肯定是在循环外建立map了。