集合总结
一.List
(1) 常见数据结构
1.数组(ArrayList)
ArrayList() 构造一个初始容量为 10 的空列表。
ArrayList(int initialCapacity) 构造一个具有指定初始容量的空列表。
ArrayList list = new ArrayList();
2.链表(LinkedList)
3.堆栈(栈) 特点 FILO
4.队列 FIFO
(2) 集合框架的体系
继承体系
Collection(所有集合类接口的超级接口)
|--List:特点 有序(添加的顺序)可以重复的数据
|--ArrayList :查询和修改效率高,但是删除和插入效率低。(线程不安全)
|--LinkedList :插入和删除效率高 (线程不安全)
|--Vector : 线程安全
如何选择
到底怎么使用如何选择:
1.有序(添加的顺序)可以重复的数据
2.如果查询和修改的频率高-ArrayList
3.如果插入删除频率高-LinkedList
4.如果要求线程安全 Vector
(3)ArrayList
1多查询API
2.基本数据的维护 常用的CRUD 方法
void add(int index, E element) 将指定的元素插入此列表中的指定位置。
方法太多,查看api。
3.集合的遍历
1.for 将控制循环的变量,作为索引值,依次查找数组连续存储空间的值
2.增强for循环
foreach
for(数据类型 形式参数 : 源){
}
源:需要遍历的存储数据东西: 数组 集合(必须是Iterable接口的实现)
数据类型:源中存数据的类型
形式参数:每次从源中遍历的数据.零时存放在形式参数中
3.迭代器
1.单向迭代器
Iterable 接口 有接口方法
2.双向迭代器
listIterator
(4)LinkedList
1.多查询API
2.基于数据结构的不同,他提供了很多操作头 和尾的方法
二.Set
使用的大环境:无序(添加的顺序)、不重复
HashSet
1.判断重复的标准 ① 通过添加进去的元素的hashCode+eqauls 两者进行比较
② 如果两个对象的hashCode相等 并且 两个对象调用equals结果是true 才认为两个元素重复
2.hashCode&&equals
3.根据自己的业务场景决定覆写方法的逻辑
TreeSet
1.有排序的功能
2.Comparator 用于自定义比较器
1.往集合中放的时候 TreeSet(Comparator<? super E> comparator)
1.Comparator 是一个自定义比较器的接口(标准),必须得有进行比较的方法 :compare(Object o1,Object o2);
例子:
public static void main(){
Student stu = new Student("aa",18);
Student stu2 = new Student("bb",19);
TreeSet ts = new TreeSet(new B());//新建构造器放入TreeSet里
ts.add(stu);
ts.add(stu2);
}
class B implements Comparator{
}
3.Comparable 自然排序
如果一个类实现了Comparable接口,可以认为这个类的对象具有自然排序的能力(本质就是这个对象可以调用比较的方法compareTo),这种比较和排序的规则就是自然排序
需要改变的话直接在内部覆写compareTo。
compareTo(Object obj)
传入的是需要和里面存的值比较的一个新值。
如this.name指的是存值的所有name。
集合的体系
子主题 2
三.Map
接口
HashMap
TreeMap
判断key重复的标准 和 HashSet 、TreeSet一样
Map接口
|---HashMap 判断重复的标准和HashSet一致,通过键的hashcode和equals;
|---TreeMap 判断重复的标准和TreeSet一致,1通过自然排序(Comparable接口),2定制排序(Compartor比较器)
map常用方法
CRUD
遍历方式
1.使用Set<Entry>
①先得到所有的Entry对象,Entry对象就包装了key,values;
②遍历Entry对象的集合,然后依次从Entry对象中调用方法:getKey(),getValue()
备注:
hashmap里面的Node内部类实现了Map里面的内部类Entry
所以使用Entry强转可以调用方法,因为Entry是接口,Node是有实现方法的。
2.使用keySet 方法
①先得到所有key,怎么得到?
通过keySet方法取到;
②然后遍历keySet,依次通过key来查找value。
通过Object get(Object key)方法;
Collections工具类
Properties
特殊的hashTable
使用场景:读取电脑上配置文件
hashMap的底层原理
HashMap是内部类Node实现了Map的内部接口Entry
TreeMap是内部类Entry实现了Map的内部接口Entry
所有都有getkey和getvalue方法
用多态写法Entry屏蔽他们各自的实现类的差异