集合
1.数组和集合的区别
- 相同点
- 都是容器,可以存储多个数据
- 不同点
- 数组的长度是不可变的,集合的长度是可变的
- 数组可以存储基本数据类型和引用数据类型,几个只能存储引用数据类型,如果要存储基本数据类型,需要存对应的包装类
2.遍历集合
- 迭代器
- Iterator it = c.iterator();
- hasNext() 判读当前位置还有没有元素
- next() 获取当前位置的元素,并将迭代器对象移向下一个索引位置
- remove() 删除迭代器对象当前指向的元素
- Iterator it = c.iterator();
- 增强for
- for(String str : list){
System.out.println(str);
}
- for(String str : list){
3.数据结构
- 栈
- 先进后出
- 队列
- 先进先出
- 数组
- 查询快,增删慢
- 链表
- 查询慢,增删快
4.泛型
- 介绍
- JDK5中引入的特性,提供了编译时类型安全检测机制
- 好处
- 把运行时期的问题提前到了编译期间
- 避免了强制类型转换
- 定义格式
- <类型> 指定一种类型的格式,
- <类型1,类型2,…> 指定多种类型,用逗号隔开, <E,T><K,V>
- 泛型类
- 修饰符 class 类名<类型>{ }
- 泛型方法
- 修饰符 <类型> 返回值类型 方法名(类型 变量名) { }
- 泛型接口
- 修饰符 interface 接口名<类型>{ }
- 类型通配符<?>
- 上限
- <? extends Number> Number或者其子类
- 下限、
- <? super Number> Number或其父类
- 上限
单列集合
1.Collection
- 概述
- 单列集合的顶层接口,它表示一组对象
- JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set\List)实现
- 常用方法
- add() 添加元素
- remove() 删除指定的元素
- remove() 根据条件删除
- clear() 清空集合
- contains() 判断指定元素是否存在
- isEmpty() 判断集合是否为空
- size() 集合的长度
2.List
- 特点
- 存取有序
- 可以存重复元素
- 可以控制每个元素插入的位置,可以用索引访问元素
- 特有方法
- add(index , E) 在指定位置插入指定元素
- remove(index) 删除指定索引的元素,返回被删除的元素
- set(index , E) 修改指定索引的元素,返回被修改的元素
- get(index) 获取指定索引的元素
- 遍历方式
- 迭代器
- 增强/普通for
3.ArrayList
- 特点
- 底层是数组结构实现,查询快,增删慢
3.LinkedList
- 特点
- 底层是链表结构实现,查询慢,增删快
- 特有方法
- addFirst(E) 在列表开头插入指定元素
- addLast(E) 在列表末尾插入指定元素
- getFirst() 获取列表中的第一个元素
- getLst() 获取最后一个元素
- removeFirst() 删除第一个元素
- removeLast() 删除最后一个元素
4.Set
- 特点
- 不可以存储重复元素
- 没有索引
- 遍历方式
- 迭代器
- 增强for
5.TreeSet
- 特点
- 不可以存储重复元素
- 没有索引
- 可以将元素按照规则进行排序
- TreeSet():根据其元素的自然排序进行排序
- TreeSet(Comparator comparator) :根据指定的比较器进行排序
- Comparable自然排序
- 使用空参构造创建TreeSet集合
- 自定义类实现Comparable接口
- 自定义类重写compareTo方法
@Override
public int compareTo(Student o) {
//按照对象的年龄进行排序
//主要判断条件: 按照年龄从小到大排序
int result = this.age - o.age;
//次要判断条件: 年龄相同时,按照姓名的字母顺序排序
result = result == 0 ? this.name.compareTo(o.getName()) : result;
return result;
}
- Comparator比较器排序
-
使用带参构造创建TreeSet集合
-
让构造方法接受Comparator的实现类对象,重写comparae(T o1,t o2)方法
-
排序规则必须按照要求的主要条件和次要条件来写
//创建集合对象
TreeSet ts = new TreeSet<>(new Comparator() {
@Override
public int compare(Teacher o1, Teacher o2) {
//o1表示现在要存入的那个元素
//o2表示已经存入到集合中的元素//主要条件 int result = o1.getAge() - o2.getAge(); //次要条件 result = result == 0 ? o1.getName().compareTo(o2.getName()) : result; return result; } });
-
- 两种比较方式返回值规则
- 返回值为负数,表示当前存入的元素较小,存左边
- 返回值为0,表示当前存入的元素跟集合中元素重复了,不存
- 返回值为正数,表示当前存入的元素较大,存右边
6.HashSet
- 特点
- 底层数据结构是哈希表
- 存取无序
- 不可以存储重复元素
- 没有索引
- 存储自定义元素时,要想实现元素的唯一,要求必须重写hasCode和equals方法
双列集合
1.Map
- 特点
- 双列集合,一个键对应一个值
- 键不可以重复,值可以
- 常用方法
- put(key, value) 添加元素
- remove(key) 根据键删除元素
- clear() 清空集合
- containsKey(key) 判断是否含有指定的键
- containsValue(value) 判断是否含有指定的值
- isEmpty() 判断集合是否为空
- size() 集合长度
- get(key) 根据建获取值
- keySet() 获取所有键的集合
- values() 获取所有值的集合
- enntrySet() 获取所有键值对集合的对象
- 遍历方式
- 获取键的集合,使用增强for根据键找值,
- 获取键值对的集合,使用增强for获得每一个entry,再获取每一个entry的键和值
2.hashMap
- 特点
-
底层是哈希表结构
-
依赖hashCode方法和equals方法保证键的唯一
-
如果键要存储的是自定义对象,需要重写hashCode和equals方法
public class Student(){
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}@Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; } }
-
3.TreeMap
- 特点
-
底层是红黑树结构
-
依赖自然排序或者比较器排序,对键进行排序
-
如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则
public class Student implements Comparable{@Override public int compareTo(Student o) { //按照年龄进行排序 int result = o.getAge() - this.getAge(); //次要条件,按照姓名排序。 result = result == 0 ? o.getName().compareTo(this.getName()) : result; return result; } }
-