阅读JDK8 HashSet源码应该了解什么

1、HashSet的底层由HashMap实现。

2、transient关键字:作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。

3、序列化:将 Java 对象序列化为二进制文件。https://www.ibm.com/developerworks/cn/java/j-lo-serial/index.html

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

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

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

转载于:https://my.oschina.net/huangchp/blog/1552969

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值