文章目录
- 一、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<>();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);}@Overridepublic String toString() {return "\nCar{" +"name='" + name + '\'' +", price=" + price +'}';}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!