线性表:
1.数组:
2.链表:
单链表 , 双链表 , 循环链表
3.栈
4.队列: 单向队列
双向队列
java中有哪些接口代表它们:
1.LinkedList List
2.Vector :
Stack
3.Queue:
Deque:
StringBuffer: 16 可变类
StringBuilder:
append().append(); 链式编程
reverse();
insert(int start , int end);
delete(int start ,int end);
}
String , StringBuilder ,StringBuffer 的区别:
1.使用final 修饰 不可以被继承,又被称为不可改变类
String 初始化方式 = new
放到常量池中,第一存储如果常量池没有 ,
new String("abc");
介绍一下 重载和 重写 区别:
介绍 final , finally finalized();
===================================================
泛型:
数据类型参数化;
语法结构:
List<引用数据类型 >
泛型的出现帮助我们在编译期间 就 检测了 数据类型是否 合理
防止了程序在运行期间 出现 类型转换异常,让程序特具有健壮性
Set:
无序 , 不可重复的集合
hashCode()
HashSet: 重点注意 存储 自定对象时要 重写 hashCode和 equals
由哈希表(散列表)实现 , 底层就是用 HashMap实现的
无序的(输入顺序和 输出顺序不一致) ,允许存储null 值
不可重复
常用构造器:
HashSet(); 默认长度为16
HashSet(int initialCapacity);
常用方法:
add();
clear();
contains(Object obj);
isEmpty();
iterator()
remove(Object o)
size()
static class Node<K,V> implements Map.Entry<K,V> {
final int hash; 0x223F 当前这个元素在哈希表中的位置
final K key; 元素本身
V value; new Object(); 对象, 补充位置
Node<K,V> next;
HashMap:
jdk1.7 和 jdk1.8的区别:
1.7 对象数组 + 链表形式
1.8 对象数组 + 链表 + 红黑树
Entry[]
负载因子 0.75 : 阈 yu 值 代表边界的意思
HashMap:存储原理
当我们向 HashMap中存储对象时,一定要经历两次操作(计算哈希值 ,equals比较内容)
1.我们必须通过计算 获取到当前对象的 hash值 ---> 散列值
如果这个位置上没有内容,我们就直接存储,
如果这个位置上有值了 ,那么久比较内容,如果内容相等
就去重,如果不相等就以链表的形式向下存储,如果
链表的形式长度 > 7 就以红黑树的形式存储
在使用HashSet存储对象时:
1. 如果 equals 相等 ,hashCode 一定相等吗?
所以 一定相等
现有的 hashCode 在有equals
2. 如果hashCode值相等, equals一定相等吗?
我们管 这种 hashCode相等的 情况 叫 哈希碰撞 (哈希冲突)
什么是哈希冲突?
---------------------------------------------------
TreeSet: 有序的set 集合
Comparable: 可以比较的
和
Comparator: 自定义比较器
区别:
它是让当前 需要排序的对象 具有 比较的能力,
实现这个接口后 重写 compartTo方法,是jvm 默认的比较规则
单一 , 会"污染"当前类的结构
Comparator被称为 自定义比较器:
使用人员可以自行 定义多个 比较器 ,实现比较规则,并重写compare方法
相比Comparable 更加灵活 ,并且不会"污染" 实现比较功能的类
提供了匿名内部类的方式:
例如:
Set<Student> set = new TreeSet<>(new Comparator(){
@Override
public int compare(Student s1,Student s2){
reutrn 0;
}
});