1. 集合的由来及集合继承体系图
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
2. 数组和集合的区别
- (1): 长度区别:
数组的长度是固定的而集合的长度是可变的 - (2): 存储数据类型的区别:
数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型 - (3): 内容区别:
数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素
3. Collection集合的功能概述
- a:添加功能
boolean add(Object obj)
:添加一个元素
boolean addAll(Collection c):
添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素) - b:删除功能
void clear():
移除所有元素
boolean remove(Object o):
移除一个元素
boolean removeAll(Collection c):
移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素
如果没有交集元素 则删除失败 返回false - c:判断功能
boolean contains(Object o):
判断集合中是否包含指定的元素
boolean containsAll(Collection c):
判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true)
比如:1,2,3 containsAll 12=true 1,2,3 containsAll 2,3,4=false
boolean isEmpty():
判断集合是否为空 - d:获取功能
Iterator<E> iterator()(重点)
- e:长度功能
int size():
元素的个数 - f:交集功能
//例如:A集合对B集合取交集,获取到的交集元素在A集合中。返回的布尔值表示的是A集合是否发生变化
boolean retainAll(Collection c):
获取两个集合的交集元素(交集:两个集合都有的元素) - g:把集合转换为数组
Object[] toArray()
4.List 接口概述及特点
概述: List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
特点:元素有序,并且每一个元素都存在一个索引.元素可以重复.
5. List集合的特有功能概述
void add(int index,E element):
在指定索引处添加元素
E remove(int index):
移除指定索引处的元素 返回的是移除的元素
E get(int index):
获取指定索引处的元素
E set(int index,E element):
更改指定索引处的元素 返回的而是被替换的元素
6. ListIterator
特有功能:ListIterator 继承自Iterator 可以使用Iterator中的方法
boolean hasPrevious():
是否存在前一个元素
E previous():
返回列表中的前一个元素
以上两个方法可以实现反向遍历 但是注意 要完成反向遍历之前 要先进行正向遍历 这样指针才能移到最后
如果直接反向遍历是没有效果的 因为指针默认位置就在最前面 他前面没有元素
7. List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
8. 数据结构之栈和队列
- A:数据结构概述及常见数据结构
数据结构其实就是存储数据的格式
分类: 栈 , 队列 , 数组 , 链表 , 树 , 哈希表 - B:栈特点: 先进后出
- C:队列: 先进先出
9. 数据结构之数组和链表
- A:数组特点: 查询快 , 增删慢
- B:链表特点: 查询慢 , 增删快
10. ArrayList
ArrayList基于数组实现,是一个动态的数组队列。但是它和Java中的数组又不一样,它的容量可以自动增长,类似于C语言中动态申请内存,动态增长内存!
- a.ArrayList存储字符串并遍历:
void forEach(Consumer<? super E> action) 执行特定动作的每一个元素的 Iterable直到所有元素都被处理或操作抛出异常 - b.集成了AbstractList,AbstractList又继承了AbstractCollection实现了List接口,它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能!
- c. 实现了RandomAccess接口,提供了随机访问功能,实际上就是通过下标序号进行快速访问。
实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
实现了Serializable接口,支持序列化,也就意味了ArrayList能够通过序列化传输。
11.ArrayList的API
// Collection中定义的API
boolean add(E object)
boolean addAll(Collection<? extends E> collection)
void clear()
boolean contains(Object object)
boolean containsAll(Collection<?> collection)
boolean equals(Object object)
int hashCode()
boolean isEmpty()
Iterator<E> iterator()
boolean remove(Object object)
boolean removeAll(Collection<?> collection)
boolean retainAll(Collection<?> collection)
int size()
<T> T[] toArray(T[] array)
Object[] toArray()
// AbstractCollection中定义的API
void add(int location, E object)
boolean addAll(int location, Collection<? extends E> collection)
E get(int location)
int indexOf(Object object)
int lastIndexOf(Object object)
ListIterator<E> listIterator(int location)
ListIterator<E> listIterator()
E remove(int location)
E set(int location, E object)
List<E> subList(int start, int end)
// ArrayList新增的API
Object clone()
void ensureCapacity(int minimumCapacity)
void trimToSize()
void removeRange(int fromIndex, int toIndex)
12. ArrayList支持3种遍历方式
- [1] 通过迭代器遍历。即通过Iterator去遍历
- [2] 第二种,随机访问,通过索引值去遍历。
由于ArrayList实现了RandomAccess接口,它支持通过索引值去随机访问元素。 - [3] for循环遍历
13.toArray()异常
调用 toArray() 函数会抛出“java.lang.ClassCastException”异常,但是调用 toArray(T[] contents) 能正常返回 T[]。
toArray() 会抛出异常是因为 toArray() 返回的是 Object[] 数组,将 Object[] 转换为其它类型(如如,将Object[]转换为的Integer[])则会抛出“java.lang.ClassCastException”异常,因为Java不支持向下转型。具体的可以参考前面ArrayList.java的源码介绍部分的toArray()。
解决该问题的办法是调用 T[] toArray(T[] contents) , 而不是 Object[] toArray()。
14. LinkedList的特有功能
- A:LinkedList类概述: List 接口的链接列表实现 , 此实现不是同步的
- B:LinkedList类特有功能
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast()
15. ArrayList 和 LinkedList 的区别
ArrayList 是 List 接口的一种实现,它是使用数组来实现的。
LinkedList 是 List 接口的一种实现,它是使用链表来实现的。
ArrayList 遍历和查找元素比较快。LinkedList 遍历和查找元素比较慢。
ArrayList 添加、删除元素比较慢。LinkedList 添加、删除元素比较快。