关于Java基础学习的积累和知识总结
1、ArrayList和LinkedList底层实现和区别
实现原理:
arraylist 的实现是基于动态数组的实现,linkendlist是基于链表的数据结构
区别:
array list查询快,增删慢【因为ArrayList可以随属机定位,而LinkedList要移动指 针一步一步的移动到节点处】
linkendlist 查询慢,增删快【linkendlist 只需要对指针进行修改即可】
2、HashSet 集合
2.1、哈希表底层特点:
去重
无序
2.2、哈希表去重的原理
【1】 依赖hashcode 和 equals两个方法
- hashCode方法来自Object,用来返回一个int类型整数,返回值就是成为哈希值。
- Object中hashCode得到的值,是有底层对象的地址经过哈希运算得到的一个值,通常认为是一个地址值(其实不一定是真实的地址,这个哈希值有可能是被地址经过哈希运算之后的值)
- 当我们对hashCode方法重写后,不是有地址计算得到哈希值,而是通过该对象的所有参与运算的成员变量的值进行运算得到结果。
- 可以认为是一种对象的标志。
【2】、如果两个对象的哈希值是不同的,我们可以断定两个对象一定是不同的。HashSet就可以直接存入该元素
【3】、1. 如果两个对象的哈希值是相同,不能确定两个对象是否相同,进一步使用equals判断两个对象是否相同。如果是true,相同,如果false。
哈希表结构的HashSet集合,存储元素前先要调用hashCode方法是否有相同的哈希值元素。如没有直存入,如果有相同,进一步判断equals。
HashSet存储JDK中已存在的类型:String,包装类型对象…这些类型已经做了对equals和hashCode方法的重写
注意:如果自定义类型要达到去重存储,应该重写hashCode和equals
3、LinkedHashSet
LinkedHashSet底层结构:
- 链表结构【维护存入的顺序】
- 哈希表结构【去重】