注:绿色是类,蓝色是接口
Iterable是一个接口,被Conllection接口继承,实现该接口可以拥有增强for循环,即遍历,用于迭代遍历元素也叫迭代器。实现Iterable接口的集合类必须提供Iterator()方法,该方法返回Iterator。
Iterator中的方法: ①hasNext(); 判断是否存在下一项
②next(); 获取下一项
③remove(); 删除有next()返回的最新项
Conllection是集合类的上级接口,是List、Set、Queue的父类,注意但不是Map的父类。
Conllection中的常用方法: ①size(); 返回集合的长度
②isEmpty(); 判断集合是否为空
③contains(Object); 判断集合中是包含某项
④clear(); 清除集合中的全部元素,将集合的长度变为0
⑤add(); 向集合中增加某项
⑥remove(Object); 删除集合中的项
⑦iterator(); 迭代集合
⑧toArray():将集合转换为一个数组,所有集合元素变成相应的数组元素。
Set 接口特点:保存元素没有顺序(但是也有一定的规律,就是每次输出来的顺序是一样的)、无下表、不能重复
Set 常用实现类:
①HashSet:特点 速度最快,没有明显顺序,几何元素可以放入一个null
②TreeSet:按照比较结果升序保存对象
③LinkedHashSet:按照添加顺序保存对象
List 接口特点:可以重复、有下表、可以重复
List 常用实现类:
①ArrayList:查询速度快,但是增加删除比较慢
②LinkedList:增加删除的速度快,但是查询的速度慢
Queue保存一个队列(先进先出)的顺序
①PriorityQueue:(PriorityQueue extends AbstractQueue 而AbstractQueue extends Queue)并不是一个标准队列的实现,因为它的排序并不是按照加入队列的顺序,而是按照元素的大小
②Deque:Deque接口代表一个"双端队列",双端队列可以同时从两端来添加、删除元素,因此Deque的实现类既可以当成队列使用、也可以当成栈使用
2.1 ArrayDeque 是一个基于数组的双端队列,和ArrayList类似,它们的底层都采用一个动态的、可重分配的Object[]数组来存储集合元素,当集合元素超出该数组的容量时,系统会在底层重新分配一个Object[]数组来存储集合元素
2.2 LinkedList
Map 以键值对的形式来存值。键不可以重复,允许插入一个null;值可以重复,允许插入多个null。
map 常用实现类:
①HashMap:访问速度最快,没有顺序
②TreeMap:按照比较结果的升序保存键
③LinkedHashMap:按照插入到顺序保存键,同时访问速度相当于HashMap
(1)集合(ArrayList)与数组(Array)的区别?
①ArrayList 集合、动态数组,是Array的版本。
②存储的数据类型:数组只能存储一种类型的数据,而集合可以存储不同类型的数据
③长度:数组长度是固定的,而集合的长度是可变的
(2)集合如何转数组?数组转集合呢?
集合转数组:Arrays.asList(数组);
数组转集合:list。toArray();
(3)Conllection中的remove()方法和Iterator中的remove()方法的区别?
①参数:Conllection 中的remove(Object)代参,而Iterator的remove()不代参。
②性能:Iterator中的remove()方法效率更高。因为Conllection中的remove()方法需要从集合中一个一个的遍历才能找对象才能进行删除;而Iterator中的remove()方法结合next()方法一起使用,找到下一项删除。
③容错:在使用Iterator遍历的时候,Iterator中的remove()不会报错,但是Conllection中的remove()会报错:ConcurrentModificationEception。原因:因为Iterator内部对象个数和原来集合中的对象个数保持一致,所以不报错;而Conllection中二者不一致从而导致报错
(4)对集合进行随机排序?
Collections.shuffle(list);