体系
Collection
接口List
接口:按照顺序插入数据,可重复ArrayList
实现类:LinkedList
实现类:
Set
接口:不可重复的集合HashSet
实现类
Queue
接口:队列LinkedList
实现类ArrayBlockingQueue
实现类PriorityQueue
实现类
Map
接口HashMap
实现类Hashtable
实现类
ArrayList
底层通过数组实现,可理解为扩容数组
ArrayList
的插入,可能涉及数组元素的移动、扩容
创建ArrayList
对象
不传递类型参数和长度参数,直接构造:ArrayList list = new ArrayList();
。此时list
可以包含各种类型的数据,底层是长度为0的数组
可以传入长度参数,指定数组初始长度:ArrayList list = new ArrayList(10);
可以传入另一个同类型集合作为参数
⚠️ArrayList
扩容机制:无参构造时,第一次add
时,底层创建长度为10的数组,以后每当不够时,就创建长度为1.5倍的新数组,再将数据搬到新数组,添加,原来的引用作废
常用方法
add(e)
:末端添加数据e
add(i, e)
:索引i
位置增加元素e
addAll(Collection c)
:把集合c
中的元素全加进调用的对象size()
:集合中元素个数get(i)
:获取索引i
位置处的元素set(i, e)
:设置索引i
处元素为e
(有返回值,是修改前的值remove(i)
:删除索引i
处的元素(有返回值,是删除的元素值- 可用
enhance for
遍历 indexOf(e)
:返回e
的第一个索引,若不存在,返回-1
lastIndexOf(e)
:返回e
的最后一个索引,若不存在,返回-1
boolean contains(e)
:是否存在e
boolean isEmpty()
:ture
表示集合空clear()
:清空toArray()
:把集合变成数组类型clone()
:复制新对象
LinkedList
底层是链表实现
创建LinkedList
对象
和ArrayList
类似,不再赘述
常用方法
添加元素
add(e)
:在末端添加元素e
add(i, e)
:在索引i
位置添加元素e
pop(e)
:在链表最前面添加元素e
addFirst(e)
:头插e
addLast(e)
:尾插e
addAll(Collection c)
:将c
中的数据都添加
获取元素
get(i)
:获取索引i
位置处的元素getFirst()
:获取第一个元素getLast()
:获取最后一个元素- 可用
enhance for
按顺序遍历 contains(e)
:是否包含元素e
indexOf(e)
:获取e
的第一个索引lastIndexOf(e)
:获取e
的最后一个索引
修改元素
set(i, e)
:将索引i
的元素设置为e
删除元素
remove()
:默认删除第一个元素pop()
:弹出第一个元素remove(i)
:删除索引i
位置remove(e)
:删除元素e
removeFirst()
removeLast()
clear()
:清空
其他
size()
:获取长度isEmpty()
“:是否为空
补充 比较器
ArrayList
和LinkedList
有排序方法sort()
,对于一维数组可以实现默认升序
我们可以自己指定排序方式,需要传入比较器类对象,这个类必须实现Comparator
接口,重写compare
方法
compare
方法需要指定类型参数,返回一个int
,传入Object
对象o1
和o2
。返回0
表示两个对象值“相等”;返回正数,说明o1>o2
,那么o1
要排到o2
后面,实际就是降序;返回负数,说明o1<o2
,o1
排在o2
前面,就是升序
HashSet
特点:无序存储,保证集合中元素唯一,不重复
底层是数组+链表,元素加入HashSet
时,通过哈希算法计算应该存储的位置。采用一定方法解决冲突(数组+链表,拉链法)
哈希值的计算,涉及到equals
方法和hashCode
方法
常用方法
创建
Set<Integer> set = new HashSet<Integer>();
可以不指定类型参数,存储任意类型
添加元素
add(e)
:将元素e
添加addAll(Collection c)
:将集合c
里面的元素添加进去
访问元素
enhance for
遍历
删除元素
remove(e)
:删除元素e
clear()
:清空
其他
isEmpty()
:判断集合是否为空contains(e)
:判断集合是否包含e
clone()
:克隆对象
Queue
实现类包括LinkedList
、ArrayBlockingQueue
和PriorityQueue
ArrayBlockingQueue
底层是数组,构造时需要传入参数,指定长度。队列满无法再入队
LinkedList
是链队
PriorityQueue
是优先队列,小顶堆