二话不说,直接上图(盗的) 发现抄别人的图根本不明白,不如自己画一遍记忆深刻(持续更新),过程中还发现的一个问题,当前还涉及不到,先Todo一下。
TODO
1、在整理collection结构的时候发现java子类会实现父类已经实现的接口,究其原因,是反射的动态代理的时候会用到(这里还未涉及,之后再学习)
1、stack(栈)
继承Vector类,有以下几个方法:
2、数组
脑中突然出现一个想法,Java数组属于内置类型么?如果是内置类型,分配资源要用new关键字,况且还有一个Array的类型,难不成Array是数组的包装类…
嗯,没错,无知使得我想象力无限~~~首先找了一下Array类,在API中一顿找都没找到,从别人的文章中找到了,连带扒出另一个很像的Arrays类,是一个操作数组的方法类。
回归问题,Java数组和Array类究竟是啥关系,附一个链接(https://www.cnblogs.com/wuchangming/archive/2013/03/28/2986184.html),最初搜到的答案,看了源码也没看懂,文章里讲“Java中的所有数组都是通过Array类实例化。Array类没有public的构造方法,数组是通过Array的newInstance()方法进行实例化,而这个方法会调用底层C代码开辟内存空间”,先这样理解一下。
Arrays
如前所述,‘java.util.Arrays’是一个方法类,所有的方法都是static方法
方法名 | 用法 |
---|---|
copyOf(arr, length) | 从头截取一定长度,返回同类型数组 |
copyOf(arr, from, to) | 截取范围内的一段, 返回同类型数组 |
equals(arr1, arr2) | 比较两个数组是否相等,返回boolean |
3、Queue
Queue接口定义的方法有
返回值 | 方法 | 功能 |
---|---|---|
boolean | add (E e) | 尾部添加元素 空间不足抛异常 |
E | element() | 返回头部元素 |
boolean | offer(E e) | 尾部添加元素 不抛异常 |
E | peek() | 返回头部元素 为空返回null |
E | poll() | 弹出头部元素 为空返回null |
E | remove() | 弹出头部元素 |
4、LinkedList
(Java集合和c++容器的不同之处还是有点多啊,,,吐槽一下)
LinkedList类实现了Queue接口和Deque接口,用它来实现队列和双端队列
5、Set
set接口定义的集合类型,不包含重复元素,最多有一个null值
TreeSet
TreeSet底层用TreeMap实现,红黑树结构,常用的(增、删、查、遍历)方法如下:
返回值 | 函数名 | 功能 |
---|---|---|
boolean | add(E e) | 添加元素 |
E | pollFirst() | 返回并删除最小元素,set为空返回null |
E | pollLast() | 返回并删除最大元素,set为空返回null |
boolean | remove(E e) | 若存在该元素则删除 |
boolean | contains(E e) | 查询元素 存在返回true |
E | ceiling(E e) | 查询元素 返回大于等于该元素的最小元素,若无return null |
E | floor(E e) | 查询元素 返回小于等于该元素的最大元素,若无return null |
E | higher(E e) | 查询元素 返回严格大于该元素的最小元素,若无return null |
E | lower(E e) | 查询元素 返回严格小于该元素的最大元素,若无return null |
E | first() | 查询元素 返回树中最小元素 |
E | last() | 查询元素 返回树中最大元素 |
Iterator | iterator() | 返回迭代器 升序(即指向最小) |
Iterator | descendingIterator() | 返回迭代器 降序序(即指向最大) |
ps:类的继承结构中NavigableSet继承于Set,扩展了 SortedSet,具有了为给定搜索目标报告最接近匹配项的导航方法。方法 lower、floor、ceiling 和 higher 分别返回小于、小于等于、大于等于、大于给定元素的元素,如果不存在这样的元素,则返回 null。
Iterator(只有删查功能)
该接口定义了几个抽象方法,迭代器是指向两个元素的中间,不指向元素
返回值 | 方法名 | 功能 |
---|---|---|
boolean | hasNext() | iter之后还有元素,返回true |
E | next() | 返回iter后一个元素,iter并向后滑动一个位置 |
void | remove() | remove方法对next方法具有依赖性,必须先调用一次next(即先让iter越过要删除的元素,再remove回调删除该元素) |
ListIterator(可以增删改查)
ListIterator接口 继承于 Iterator接口。新增一个add方法,用于在iter前插入元素。源码中有这样一段解释,‘The element is inserted immediately before the element that would be returned by {@link #next}, if any, and after the element that would be returned by {@link #previous}, if any’,刚开始没看懂,其实就是说插在前面,,,
返回值 | 方法名 | 功能 |
---|---|---|
boolean | add(E e) | 在iter前插入元素 |
void | remove() | 与Iterator不同的是,remove方法依赖于next方法或者previous方法 |
void | set(E e) | 与remove方法一样,也依赖于next方法或这previous方法,新元素替换前一步iter跳过的元素 |
Vector和ArrayList的区别
简单区别是vector线程安全,开销比较大