<1>集合对象转数组
Object[] arrayOfObject = list.toArray();
<2>数组复制
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
Arrays的copyOf()方法传回的数组是新的数组对象,所以您改变传回数组中的元素值,也不会影响原来的数组。
copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值
<3>hashmap的深复制与浅复制:
浅复制:则是只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存。
深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.深复制把要复制的对象所引用的对象都复制了一遍。
Map<String, String> m1 = new HashMap<String, String>();
// do sth here
Map<String, String> m2 = new HashMap<String, String>();
m2=m1; //只传递了一个引用,所有m1的值变化之后m2自然也跟着变了
m2.putAll(m1); //将m2生成一个新的map,即使m1变化之后也并不会影响m2的值 ,如果被复制的对象本身含有引用类型的对象,则此方法不能实现深复制
//实现对象的深复制
public class CloneUtils { @SuppressWarnings("unchecked") public static <T extends Serializable> T clone(T obj){ T clonedObj = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(obj); oos.close(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); clonedObj = (T) ois.readObject(); ois.close(); }catch (Exception e){ e.printStackTrace(); } return clonedObj; } }
<3>super关键字的引用:
子类的构造函数默认第一行会默认调用父类无参的构造函数,隐式语句
子类显式调用父类构造函数