LinkedHashSet底层机制

文章目录

  • 一、LinkedHashSet底层结构
    • 1 底层使用LinkedHashMap
    • 2 底层数据结构
  • 二、使用示例


一、LinkedHashSet底层结构

1 底层使用LinkedHashMap

  • LinkedHashMap是HashMap的一个子类,具有和HashMap相同的存储结构和扩容机制,在此基础上增加了head(头节点)和tail(尾节点)

2 底层数据结构

  • Entry 类型数组 + 单向链表 + 双向链表 + 红黑树
  • Entry 类型数组 继承了 hashmap 的node结构,增加了Entry before, after两个属性
  • 单向链表 用于维护数组的每一个Entry元素的链表关系
  • 双向链表 通过新增的before和after属性进行控制,主要实现了插入顺序和读取顺序保持一致
  • 红黑树 用于把过长的单向链表结构树化

二、使用示例

public class LinkedHashSetTest {public static void main(String[] args) {LinkedHashSet<Car> carSet = new LinkedHashSet<>();// Car 的name和price相等就认为是一样carSet.add(new Car("奔驰",new BigDecimal(20000)));carSet.add(new Car("奔驰",new BigDecimal(20000)));carSet.add(new Car("宝马",new BigDecimal(70000)));carSet.add(new Car("宝马",new BigDecimal(80000)));carSet.add(new Car("路虎",new BigDecimal(20000)));carSet.add(new Car("1",new BigDecimal(1)));carSet.add(new Car("2",new BigDecimal(2)));carSet.add(new Car("3",new BigDecimal(3)));carSet.add(new Car("4",new BigDecimal(4)));carSet.add(new Car("5",new BigDecimal(5)));carSet.add(new Car("6",new BigDecimal(6)));carSet.add(new Car("8",new BigDecimal(8)));carSet.add(new Car("9",new BigDecimal(9)));carSet.add(new Car("10",new BigDecimal(10)));carSet.add(new Car("11",new BigDecimal(11)));carSet.add(new Car("12",new BigDecimal(12)));carSet.add(new Car("13",new BigDecimal(13)));carSet.add(new Car("14",new BigDecimal(14)));System.out.println(carSet);}
}
class Car{private String name;private BigDecimal price;Car(String name, BigDecimal price) {this.name = name;this.price = price;}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (o == null || getClass() != o.getClass()) {return false;}Car car = (Car) o;return Objects.equals(name, car.name) &&Objects.equals(price, car.price);}@Overridepublic int hashCode() {return Objects.hash(name, price);// 这里返回指定大小的hashCode是为了验证链表树化成红黑树//return 100;}@Overridepublic String toString() {return "\nCar{" +"name='" + name + '\'' +", price=" + price +'}';}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部