一种运算受限的线性表,只允许在一端进行插入和删除操作,不允许在任何其他位置进行添加、查找、删除的操作。
特点:
-
先进后出
-
栈的入口、出口都是栈的顶端位置
一种运算受限的线性表,只允许在表的一端进行插入操作,在表的另一端进行删除操作。
特点:
- 先进先出
- 队列的入口、出口各占一侧
一种有序的元素序列,在内存中开辟一段连续的空间并在此空间存放元素
特点:
- 查找元素快(通过索引)
- 增删元素慢(需要创建新数组,复制数据)
由一系列结点组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是指针域。常用的链表结构有单向链表与双向链表。
特点:
- 多个结点之间,通过地址进行连接
- 查找元素慢(通过连接的结点依次向后查找,每次查询元素必须从头开始)
- 增删元素快(修改指针,对链表的总体结构没有影响)
树有多个节点,用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。
-
二叉树:二叉树是一种特殊的树,二叉树的每个节点最多只能有2个子节点。
-
排序树/查找树:在二叉树的基础上,元素是有大小顺序的,左子树小、右子树大。
-
平衡树:左右子树的高度相差不超过 1 的树为平衡二叉树。
-
红黑树
特点:趋近于平衡树,查询速度非常的快,查询叶子结点最大次数与最小次数不超过2倍
约束条件
java.util.List接口继承自Collection接口,是单列集合的一个重要分支
-
特点:
- 有序的集合,存储元素和取出元素顺序一致
- 有索引,包含了一些带索引的方法
- 允许存储重复的元素
-
特有方法:
public void add(int index, E element):将指定的元素添加到指定的位置上public E get(int index):返回集合中指定位置的元素public E remove(int index):移除集合中指定位置的元素public E set(int index, E element):用指定元素替换集合中指定位置的元素(返回值为替换前的元素)
-
注意:防止IndexOutOfBoundsException异常
-
List的实现类
-
ArrayList:大小可变的数组实现,此实现不是同步的
-
LinkedList:链表结构,方便元素添加、删除的集合,此实现不是同步的
特有方法:
public void addFirst(E e):将指定元素插入链表开头public void addLast(E e):将指定元素插入链表结尾public void push(E e):将指定元素插入此列表所表示的堆栈public E getFirst():返回链表开头元素public E getLast():返回链表结尾元素public E removeFirst():移除链表开头元素public E removeLast():移除链表结尾元素public E pop():从此列表所表示的堆栈弹出一个元素public boolean isEmpty():判断链表是否为空注意:防止NoSuchElementException异常
-
Vector:可以实现可增长的对象数组,此实现是同步的
-
java.util.Set接口继承自Collection接口,是单列集合的一个重要分支
-
特点:
- 不允许存储重复的元素
- 没有索引,也没有带索引的方法
-
Set的实现类
-
HashSet:是一个无序的集合,底层是一个哈希表结构(查询速度非常快)
哈希值:是一个整数,由系统直接给出,在Object类中
int hashCode()可以获取对象的哈希值哈希表结构:JDK1.8+之后数组+红黑树,把元素进行分组(相同哈希值是一组),红黑树把一组元素连接到一起
add方法会调用hashcode和equals方法,存储自定义元素时,必须重写hashcode和equals方法
-
LinkedHashSet:继承了HashSet类,具有可预知迭代顺序的Set接口的哈希表和链表的实现
多了一重链表(记录元素的存储顺序),保证元素有序
-
-
可变参数
JDK1.5+之后出现的新特性
修饰符 返回值类型 方法名(参数类型... 形参名){ 方法体 }
等价于
修饰符 返回值类型 方法名(参数类型[] 形参名){ 方法体 }
注意事项:
-
一个方法的参数列表只能有一个可变参数
-
如果一个方法的参数有多个,可变参数必须写在参数列表的末尾
-
可变参数的特殊写法
public static void method(Object... obj){ 方法体 }
-
java.utils.Collections是集合工具类,用来对集合元素进行操作,常用方法如下:
public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素public static void shuffle(List<?> list):打乱集合顺序public static <T> void sort(List<T> list):将集合中元素按照默认规则排序(升序)public static <T> void sort(List<T> list, Comparator<? Super T>):将集合中元素按照指定规则排序
注意:
-
sort方法的使用前提:被排序的集合里存储的元素,必须实现Comparable接口,重写compareTo方法定义排序的规则
-
排序规则:this-参数->升序;参数-this->降序
-
Comparator可以写成匿名内部类
Collections.sort(list,new Comparator<Student>(){ @Override public int compare(Student o1,Student o2){ 方法体 } })




