复习{
泛型: 数据类型参数化
语法: 接口<A-Z> ,类<A-Z>
作用:省略强制转换
在编译期间验证容器中数据类型是否匹配
List<Person> p = new ArrayList<>();
1.List接口的
ArrayList , Vector实现类的区别
Vector是线程安全的, 性能慢
ArrayList是线程不安全的, 性能快
底层实现都是用 对象数组完成的
Stack栈: LIFO
push(); 压栈
pop(); 查看并删除
peek(); 查看不删除
search(); 查看并返回栈的位置 , 栈顶的位置是1
推箱子, 象棋悔棋, 子弹入膛
数据结构中:
1.线性表: 数组,队列(单向,双向),链表(单向,双向,双向循环链表), 栈
Queue: 单向队列 FIFO
|-- LinkedList: 6
三个有异常的
add
element
remove
三个返回特殊值的
offer
poll
peek
Deque: 双向队列
|-- LinkedList:
push(); 压栈
pop(); 删除
getFirst();
getLast();
offerFirst();
offerLast();
Set: 接口的特点 无序 不可以重复 , 允许存储一个null
|-- HashSet:
存储原理: HashSet底层是用HashMap实现的,HashMap哈希表(散列表)
所以重点了解HashMap是如何存储数据的
向HashSet中存储数据时,一定会经历两步,
1.计算出当前元素在hash表中的位置,hash值 (散列值)
2.如果当前hash对应的位置上 没有 数据,那么就直接存储
如果有数据,就调用两个对象的equals方法,如果相等
就舍去,如果不相等就以链表的形式存储
key-value 双值存储 , 一出现就是一对儿
set.add(5); 实际上就是将当前的数据当作了map集合的key值
value 值 是 Object obj = new Object();
的填充,为了满足语法结构
java中的循环种类?
1.while
2.do while
3.for
4.iterator
5.foreach
在HashSet存储自定义对象时 必须 重写hashCode 和equals方法
================================================================================
|-- TreeSet:
有序的Set集合,所谓的有序 就可以根据自己需求进行排序
TreeSet底层实现 是 TreeMap,TreeSet 又实现了SortedSet接口
SortedSet 底层是用 自然排序 和 Compartor的 比较器进行排序的
TreeMap 是红黑树结构存储
构造器:
TreeSet(); 用的是自然排序
TreeSet(Comparator<? super E> comparator); 用的是自定义比较器排序
方法: add() 添加数据
clear(); 清除
remove(Object obj); 删除
isEmpty(); 判断是否是 空字符集
contains(Object o) 判断是否包含
iterator(); 数据遍历
如果向TreeSet添加元素 必须重写Comparable接口 ,并重写
compareTo方法, 入参是容器中别的对象
TreeSet存储数据时 是用自己的 排序算法实现的,不是用计算
hash值的位置来存储的
在排序中, 如果 年龄相等, 就 按分数排序
-------------------------------------------------------------
第二种实现比较排序的方式 , 实现Comparator接口
Comparable: 自然排序, TreeSet构造器默认的
需要重写compareTo(Object obj)方法
会污染当前需要排序的类,比较规则单一
TreeSet();
Comparator: 自定义比较器
相比Comparable更加灵活,可以拓展多个比较规则
重写compare(Object obj1,Object obj2);
不会污染需要排序的类,需要用到
TreeSet(Comparator c);构造器
1.写法 编写多个java类 实现Comparator 接口
可以按照自己的规则 编写比较规则
2.使用创建匿名内部类的形式向TreeSet中添加自定义对象
Set<Person> set1 = new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
});
===================================================================================
Collections: 用来操作List,Set较多 集合的 工具类
仅有 静态方法组成、
reverse(List<?> list); 将集合反转输出
shuffle(List<?> list); 打乱顺序输出
sort(List list); 给指定的集合排序 ---> 是 使用 快排 完成的
swap(List<?> list, int i, int j);指定集合的某个的值交换
Arrays: 工具类 , 应该在java常用类中讲
Arrays操作 数组的
asList(); 将数组添加到 集合中包裹
sort(); 将数组进行排序
}