閱讀JDK8 HashSet源碼應該瞭解什麼

一、HashSet的底層由HashMap實現。html

二、transient關鍵字:做用是控制變量的序列化,在變量聲明前加上該關鍵字,能夠阻止該變量被序列化到文件中,在被反序列化後,transient 變量的值被設爲初始值,如 int 型的是 0,對象型的是 null。java

三、序列化:將 Java 對象序列化爲二進制文件。https://www.ibm.com/developerworks/cn/java/j-lo-serial/index.html數組

四、spliterator方法:JDK 1.8 中添加,建立集合的分片迭代器。htm

public static void main(String[] args) throws Exception {
  Employee emp = new Employee();
  emp.name = "Tom";
  Employee emp2 = new Employee();
  emp2.name = "Jerry";
  Collection<Employee> set = new HashSet<>();
  set.add(emp);
  set.add(emp2);

  Spliterator<Employee> spl = set.spliterator();

  while (spl.tryAdvance(new Consumer<Employee>() {
    public void accept(Employee employee) {
      employee.name += "_09";
    }
  }));

  for (Employee employee : set) {
    System.out.println(employee.name);
  }

  Spliterator<Employee> spl2 = set.spliterator();
  while (spl2.tryAdvance(e -> e.name += "_10"));

  for (Employee employee : set) {
    System.out.println(employee.name);
  }
}

五、Cloneable接口:一個標記性接口,是淺拷貝,意味着若是你的類中有數組,Collection,對象,那麼僅僅拷貝的是這些變量的引用,並無將數組,集合中的成員對象複製成新的。對象

public class Employee implements Cloneable {
  public int age;
  public String name;

  public Employee clone() {
    Employee ee = null;
    try {
      ee = (Employee) super.clone();
    } catch (CloneNotSupportedException e) {
      e.printStackTrace();
    }
    return ee;
  }
}
public static void main(String[] args) {
  Employee ee = new Employee();
  ee.age = 21;
  ee.name = "clone";

  Employee ee1 = ee.clone();
  ee1.name = "clone1";

  System.out.println(ee.name);
  System.out.println(ee.age);
  
  System.out.println(ee1.name);
  System.out.println(ee1.age);
}
相關文章
相關標籤/搜索