# 数据结构
- 压栈 / 弹栈
- 栈顶元素、栈底元素
- 先进后出
# 队列
- 入队列 / 出队列
- 前端、后端
- 先进先出
# 数组
查询效率高,增删效率低
# 链表
查询效率低(必须从头开始查找,增删效率高)
# 哈希表
- 比较方法
- 哈希值
- equals
- 结构:数组 + 链表
- 元素位置:"hashCode % 位置"
- 相同位置的元素通过链表形式连接
# 集合体系结构
- Collection:单列
- List:可重复
- ArrayList
- LinkedList
- Set:不可重复
- HashSet
- TreeSet
- Map:双列
- HashMap
# Collection
# 概述
单列集合的顶层接口,无法直接实现
# 创建对象
多态:利用 ArrayList
| Collection<String> c = new ArrayList<String>(); |
# 成员方法
# add()
方法
# remove()
方法
# clear()
方法
# contains()
方法
| boolean contains(Object o) |
# isEmpty()
方法
# size()
方法
# 快捷键补充
alt + 7
:查看结构框架
# 迭代器 Iterator
# 概述
- Iterator:迭代器用于集合遍历
Iterator<E> iterator();
:返回集合元素的迭代器
- 迭代器依赖于集合存在
# 常用方法
E next()
:返回迭代器下一个元素
boolean hasNext()
:是否存在下一个元素
| while(it.hasNext()) { |
| String s = it.next(); |
| System.out.println(s); |
| } |
# List 集合及其子类
# List
List:有序集合,可以控制每个元素的插入位置
# List 特有方法
# add (index, e):指定插入
# remove (index):指定索引删除
# set (index,e):指定修改
# get (index):指定获取
# ListIterator
# 概述
ListIterator:列表迭代器,是 List 集合特有的
# 特点
- 可以任意方向遍历
- 可以迭代时修改元素
# 方法
E previous()
:返回迭代器上一元素
boolean haoPrevious()
:是否存在上一元素
void add(E e)
:插入指定元素
| List<String> list = new ArrayList<String>(); |
| ListIterator<String> it = list.listiterator(); |
| while(it.hasNext()) { |
| String s = it.next(); |
| if(s.equals("world")) { |
| it.add("javase"); |
| } |
| } |
# ArrayList
数组实现:查询快,增删慢
# LinkedList
# 概述
链表实现:查询慢,增删快
# 特有功能
void addFirst()
void addLast()
E getFirst()
E getLast()
E removeFirst()
E removeLast()
# 并发修改异常
# 异常原因
遍历时修改了集合元素长度
| List<String> list = new ArrayList<String>(); |
| Iterator<String> it = list.iterator(); |
| while(it.hasNext()) { |
| String s = it.next(); |
| if(s.equals("java")) { |
| list.add("javaEE"); |
| } |
| } |
# 修改方法
# 不用迭代器,用 for 循环索引元素
| List<String> list = new ArrayList<String>(); |
| for (int i = 0; i < list.size(); i++) { |
| String s = list.get(i); |
| if(s.equals("world")) { |
| list.add("JavaEE"); |
| } |
| } |
# 用列表迭代器添加元素
| List<String> list = new ArrayList<String>(); |
| ListIterator<String> it = list.listiterator(); |
| while (it.hasNext()) { |
| String s = it.next(); |
| if(s.equals("world")){ |
| it.add("JavaEE"); |
| } |
| } |
# 增强 for
- 增强 for 循环:简化数组和 Collection 集合的遍历
- 实现 Iterator 接口的类允许其对象称为增强型 for 循环的目标
- 原理是 Iterator 迭代器 -> 会触发 "并发修改异常"
| int[] arr = {1,2,3,4,5}; |
| for(int i : arr) { |
| System.out.println(i); |
| } |
# Set 及其子类
# Set
- 不包含重复元素
- 没有索引、不能用普通 for 循环遍历
- 迭代顺序随机
# HashSet
# 哈希值
- 根据对象的地址 / 字符串 / 数字算出来的 int 类型的数值
public int hashCode
- 返回对象的哈希值
- Object 类
# HashSet 概述
- 底层为哈希表 (HashMap)
- 迭代顺序无保证
- 没有索引,不能用 for 循环遍历
- Set 集合没有重复元素 -> 需要重写对象的 hashCode 与 equals 方法
# HashSet 存储特点
- 比较方法
- 哈希值
- equals
- 结构:数组 + 链表
- 元素位置:"hashCode % 位置"
- 相同位置的元素通过链表形式连接
# LinkedHashSet
- 底层:链表 + 哈希表
- 可预测的迭代次序
- HashSet 集合没有重复元素
# TreeSet
- 元素有序
- 自然排序:无参构造
TreeSet()
- 比较器排序:带参构造
TreeSet(Comparator comparator)
- 存储引用类 / 包装类类型
自然排序 -> 重写 compareTo 方法
| @Override |
| public int compareTo(Student s){ |
| return this.age - s.age == 0 ? this.name.compareTo(s.name) : this.age - s.age; |
| } |
比较器排序 -> 匿名内部类
| TreeSet<Studen> ts = new TreeSet<>(new Comparator<Student>(){ |
| @Override |
| public int compare(Student s1, Student s2){ |
| return s1.getAge() - s2.getAge() == 0 ? s1.getName().compareTo(s2.getName()) : s1.getAge() - s2.getAge(); |
| } |
| }) |
# 泛型
# 泛型概述
- 将类型由原来的具体的类型参数化,然后在使用 / 调用时传入的具体的类型
- 本质:参数化类型
- 实参类型只能是引用数据类型
- 泛型定义格式
- <类型>
- <类型 1,类型 2...>
# 泛型类定义格式
修饰符 class 类名<类型>{...}
- 类型可以是随便写的任意标识
- T:type
- E:element
- K:key
- V:value
# 泛型方法
- 泛型方法 -> 不限制类型
- 泛型方法定义格式:
修饰符 <类型> 返回值类型 方法名(类型 变量名){...}
# 泛型接口
修饰符 interface 接口名<类型>{...}
# 类型通配符
- 类型通配符:
<?>
- 标识各种泛类 List 的父类
- 元素可以匹配任何类型
- 不能添加元素
- 类型通配符的上限:
<? extends 类型>
# 可变参数
# 可以参数定义格式
修饰符 返回值类型 方法名(数据类型...变量名){}
| public static int sum(int...a){ |
| int sum = 0; |
| for(int i : a){ |
| sum += i; |
| } |
| return sum; |
| } |
# 特点
- 变量其实是数组
- 多个参数要把可变参数放到最后
# 可变参数的应用
# Arrays 工具类的静态方法
| |
| public static <T> List<T> asList(T...a) |
| |
| List<String> list = Arrays.asList("baozi","bjh"); |
返回有指定数组支持的固定大小的列表 -> 不能增删可以改
# List 接口的静态方法
| |
| public static <E> List<E> of(E...elements); |
| |
| List<String> list = List.of("baozi","baobao"); |
返回包含任意数量元素的不可变列表 -> 不能增删改
# Set 接口的静态方法
| |
| public static <E> Set<E> of(E...elements); |
| |
| Set<String> s = Set.of("baozi","baobao"); |
返回一个包含任意数量元素的不可变集合 -> 不能增删改
# Map
# 概述
Interface Map<K,V>
- K:键 V:值
- 将 key 映射到 value 的对象
- key 不可以重复 && 每个 key 只对应一个 value
# 创建 Map 集合的方式
多态
# 具体实现类:HashMap
- 添加元素:
V put(K key, V value)
- 删除:
V remove(Object key)
- 清空:
void clear()
- 判断键是否存在:
boolean containsKey(Object key)
- 判断值是否存在:
boolean containsValue(Object value)
- 判断是否为空:
boolean isEmpty()
- 返回集合长度:
int size()
- Map 的获取方法
| |
| |
| Map<String,String> map = new Map<>(); |
| map.put("1","baozi"); |
| System.out.println(map.get("1")); |
| |
| |
| Set<String> keySet = map.keySet(); |
| for(String key : keySet){ |
| System.out.println(key); |
| } |
| |
| |
| Collection<String> values = map.values(); |
| for(String value : values){ |
| System.out.println(value); |
| } |
| |
| |
| Set<Map.Entry<String,String>> entrySet = map.entrySet(); |
| for(Map.Entry<String,String> me : entrySet){ |
| System.out.println(me.getKey() + "," + me.getValue()); |
| } |
| |
| |
| Set<String> keySet = map.keySet(); |
| for(String key : keySet){ |
| System.out.println(key + "," + map.get(key)); |
| } |
| |
| Set<Map.Entry<String,String>> entrySet = map.entrySet(); |
| for(Map.Entry<String,String> me : entrySet){ |
| System.out.println(me.getKey() + "1" + me.getValue()); |
| } |
# Collections 工具类
常用方法(类要重写 compareTo
方法)
# 列表升序排列
| |
| public static <T extends Comparable<? superT>> void sort(List<T> list); |
| |
| Collections.sort(list); |
| |
| ArrayList<Student> array = new ArrayList<>(); |
| Collection.sort(array,new Comparator<Student>(){ |
| @Override |
| public int compare(Student s1,Student s2){ |
| return s1.getAge() - s2.getAge() == 0 ? s1.getName().compareTo(s2.getName()) : s1.getAge() - s2.getAge(); |
| } |
| }); |
# 反转列表顺序
| |
| public static void reverse(List<?> list); |
| |
| Collection.reverse(list); |
# 列表随机排列
| |
| public static void shuffle(List<?> list); |
| |
| Collection.shuffle(list); |