- 常见的数据结构
- 数组(ArrayList)
- 链表(LinkedList)
- 堆栈(栈) 特点 FILO
- 队列 FIFO
- 集合框架的体系
- 继承体系
Collection(所有集合类接口的超级接口)
|--List:特点 有序(添加的顺序)可以重复的数据
|--ArrayList :查询和修改效率高,但是删除和插入效率低。(线程不安全)
|--LinkedList :插入和删除效率高 (线程不安全)
|--Vector : 线程安全
- 如何选择
到底怎么使用如何选择:
1.有序(添加的顺序)可以重复的数据
2.如果查询和修改的频率高-ArrayList
3.如果插入删除频率高-LinkedList
4.如果要求线程安全 Vector
- ArrayList
- 多查询API
- 基本数据的维护 常用的CRUD 方法
- 集合的遍历
1.for
2.增强for循环
3.迭代器
1.单向迭代器
Iterable 接口 有接口方法
Iterable 接口 有接口方法 Iterator<T> iterator();
返回一个Iterator
Iterator
hasNext() 是否有下一个(不会移动指针)
next() 返回下一个元素(要移动指针)
remove() 删除下一个元素
注意:如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经调用了 remove 方法
ConcurrentModificationException:不能在迭代过程中对数据源进行改变
2.双向迭代器
listIterator
是List下面的方法
所有的list的实现类都可以获取 这个对象
- LinkedList
- 多查询API
- 基于数据结构的不同,他提供了很多操作头 和尾的方法
- 使用的大环境:无序(添加的顺序)、不重复
- HashSet
- 判断重复的标准
hashCode():(hashCode的值有课能会重复)
equals():
自己创建的类要去比较是否重复,需要覆写上面的方法
HashSet : 排序就是一种假象(不具备排序功能)
- hashCode&&equals
hashCode
[2018699554, 366712642, 1829164700, 1311053135]
只是覆写 了hashCode 还是会添加四个对象
equals比较
覆写equals
添加了一个对象
源码
public int hashCode() {
return Integer.hashCode(value);
}
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
- 根据自己的业务场景决定覆写方法的逻辑
- TreeSet
- 有排序的功能
Comparator 用于自定义比较器
Comparable 自然排序
- Comparator用于自定义比较器
public interface Comparable<T> 此接口强行对实现它的每个类的对象进行整体排序
|-- int compareTo(T o) 比较此对象与指定对象的顺序。
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。 -1、0 或 1
自己定义的类 必须实现Comparable 接口
覆写 compareTo(T o)--里面的逻辑需要自己定义
根据实际的业务场景定义排序的逻辑
- Comparable 自然排序
TreeSet(Comparator c) 构造一个新的空 TreeSet,它根据指定比较器进行排序。
Comparator(接口)
|--int compare(T o1, T o2) 比较用来排序的两个参数。
Comparator:自定义比较器 ,自己定制 和要比较的类的对象 源码无关
- 往集合中放的时候 TreeSet(Comparator<? super E> comparator)
- 集合的体系
- map常用方法
- CRUD
C:put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
R:get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
U:增加两次 key不变
D:remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
- 遍历方式
- 使用Set<Entry>
Set entrySet = map.entrySet();
for (Object object : entrySet) {
Entry e = (Entry) object;
System.out.println(e.getKey()+"--"+e.getValue());
}
- 使用keySet 方法
Set keySet = map.keySet();
for (Object object : keySet) {
System.out.println(object+"--"+map.get(object));
}
- 接口
- HashMap
- TreeMap
- 判断key重复的标准 和 HashSet 、TreeSet一样
- Collections工具类
都是static修饰的 ,多使用
- Properties
- 是一种特殊的hashTable
- 使用场景:读取电脑上配置文件
先了解 ,后面io会讲的详细点
- 泛型
- 建议:多使用泛型
- 泛型类的定义
T (类型)
K (key)
V (值)
E (元素)
不支持基本数据类型
- 泛型的上下限(读API)
?号 :表示通配符,不确定的类型,可以表示任意类型【? extends Object】 ;
? extends Number :表示通配符?的上限 ,必须是Number及Number的子类
? Super Number: 表示通配符 ?的下限,必须是Number及Number的父类
- hashMap的底层原理