Collections:Collection的工具类
sort()
binarySearch()
reverse()
max()
min()
shuffle()
案例:斗地主发牌游戏
Collection:单列集合的最顶层接口(两种遍历方式:迭代器 增强for循环)
|--add(); remove();clear();isEmpty();size();contains()
|--iterator()
|--List:元素有序(存入和取出的顺序相同),可以重复,可以通过索引来操作元素(遍历方式:迭代器 列表迭代器 增强for循环 普通for循环)
|--add();remove();get();size();indexOf();set();
|--ListIterator
ConcurrentModificationException 并发修改异常
①:原因:在通过迭代器遍历集合的时候 我通过集合来操作(增删改)了集合里面的元素
②:解决办法:
A:在迭代器遍历集合的时候,我们通过迭代器来操作元素
ListIterator 列表迭代器
B:for循环来遍历集合的时候,通过集合来操作元素
|--ArrayList:底层是数组结构:查询快增删慢 不安全 效率高
案例:ArrayList去除重复元素
|--Vector:底层是数组结构:查询快 增删慢 安全 效率低
学习了一些方法
|--LinkedList:底层是链表结构:查询慢 增删快 不安全 效率高
addFirst() addLast() removeFirst() removeLast() getFirst() getLast()
案例:用LinkedList模拟栈结构
|--Set:元素无序(存入和取出的顺序不相同),唯一(两种遍历方式:迭代器 增强for循环)
|--HashSet
HashSet是如何保证元素唯一性的呢?
HashSet底层是用的哈希表结构
底层依赖两个方法hasCode() equals()
首先判断hasCode()返回值是否相同
相同:判断equals()
true:说明两个对象 相同 咱们就不添加
false:说明两个对象 不相同 咱们就添加
不相同:添加
所以说咱们要让元素所在的类 重写hasCode()和equals()方法
如何重写呢?eclipse直接生成
|--TreeSet
TreeSet是如何保证元素唯一性的呢?(排序)
1:自然排序:让TreeSet存储的元素所在的对象实现Comparable接口
通过compareTo()的返回值来保证元素的唯一(排序)
正数:说明咱们要存入的这个元素比上一个元素大 往后放
负数: 说明咱们要存入的这个元素比上一个元素小 往(钱)放
顺便排序
0: 说明重复
public int compareTo(Student s){
int num =this.age-s.age;
int num2 =(num==0)?this.name.compareTo(s.name):num;
return num2;w
}
2: 通过比较器:Comparator 调用TreeSet的带参构造方法 传入一个比较器
让TreeSet就按照咱们这个比较器的规则来去掉重复和排序
如果以后我们看到方法上的参数是抽象类或者接口的时候 我们可以考虑用匿名内部类来实现
Map:双列集合的底层接口(两种:
1):先获取所有键的集合,遍历这个集合 然后通过键获取值
先找到丈夫 然后让丈夫去找妻子
2):先获取所有键值对的的集合 然后遍历这个集合 拿到每个键值对 再根据键值对来找到键和值
先获取结婚证 然后通过结婚证来找到丈夫和妻子
)
|--V put(K key, V value):如果有这个Key我们就替换值 并把被替换的值返回 ,如果没有这个Key呢 就添加 返回null
V remove(K key):根据Key来删除一个键值对 如果key没有 返回null
Set<K> keySet():返回所以得键的集合
Collection<V> values():返回所有值得集合
|--HashMap
底层是哈希表结构 ,这种结构是针对键有效的
如果要是键是自定义对象的话,我们一般重写hashCode()和equals()
|--TreeMap
底层是二叉树结构,这种结构是针对键有效
如果要是键是自定义对象的话,我们一般让他实现Comparable接口 重写compareTo方法 |
|