java for迴圈中使用克隆代替new物件
阿新 • • 發佈:2018-12-15
public class User implements Cloneable { private Integer age; private String name; public User() { } public User(Integer age) { this.age = age; } public User(Integer age, String name) { this.age = age; this.name = name; } public User clone() throws CloneNotSupportedException{ return (User)super.clone(); } @Override public String toString() { return "User{" + "age=" + age + ", name='" + name + '\'' + '}'; } public Integer getAge() { return age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } }
List<User> userList1 = new ArrayList<>(); List<User> userList2 = new ArrayList<>(); long t1 = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { User u1 = new User(); u1.setAge(10); u1.setName("Tom" + i); userList1.add(u1); } long t2 = System.currentTimeMillis(); User u1 = new User(); for (int i = 0; i < 100000; i++) { User u2 = u1.clone(); u2.setAge(20); u2.setName("Tom" + i); userList2.add(u2); } long t3 = System.currentTimeMillis(); System.out.println(t2 - t1); System.out.println(t3 - t2);
輸出:
67 31
基於 intel corei7,java1.8
list中的元素也正確。可見,for迴圈中使用克隆生成物件的效率比new生成物件的效率高。
以上是淺克隆。