DAY8

数据结构

常见的数据结构

stack,又称堆栈 ,它是运算受限的线性表 ,其限制是仅允许在标的一端进行插入和删除操作 ,不允许在其 他任何位置进行添加、查找、删除等操作。

特点:

先进后出(即 ,存进去的元素 ,要在后它后面的元素依次取出后 ,才能取出该元素)。

栈的入口、 出口的都是栈的顶端位置。

注:

压栈 :就是存元素。即 ,把元素存储到栈的顶端位置 ,栈中已有元素依次向栈底方向移动一个位置。

弹栈 :就是取元素。即 ,把栈的顶端位置元素取出 ,栈中已有元素依次向栈顶方向移动一个位置。

队列

队列 queue,简称队 ,它同堆栈一样 ,也是一种运算受限的线性表 ,其限制是仅允许在表的一端进行插入 , 而在表的另一端进行删除。

特点:

先进先出(即 ,存进去的元素 ,要在后它前面的元素依次取出后 ,才能取出该元素)。

队列的入口、 出口各占一侧。例如 ,下图中的左侧为入口 ,右侧为出口。

数组

数组:Array,是有序的元素序列 ,数组是在内存中开辟一段连续的空间 ,并在此空间存放元素。

特点:

查找元素快 :通过索引 ,可以快速访问指定位置的元素。

增删元素慢:

指定索引位置增加元素 :需要创建一个新数组 ,将指定新元素存储在指定索引位置 ,再把原数组元素根据索引 ,复制到新数组对应索引的位置。

指定索引位置删除元素 :需要创建一个新数组 ,把原数组元素根据索引 ,复制到新数组对应索引的位 置 ,原数组中指定索引位置元素不复制到新数组中

链表

链表:linked list,由一系列结点node(链表中每一个元素称为结点)组成 ,结点可以在运行时i动态生成。每 个结点包括两个部分 :一个是存储数据元素的数据域 ,另一个是存储下一个结点地址的指针域。

特点:

多个结点之间 ,通过地址进行连接。

查找元素慢 :想查找某个元素 ,需要通过连接的节点 ,依次向后查找指定元素

增删元素快 :增加元素 :只需要修改连接下个元素的地址即可

红黑树(二叉树)

二叉树 :binary tree ,是每个结点不超过2的有序树( tree )

红黑树的约束:

1. 节点可以是红色的或者黑色的

2. 根节点是黑色的

3. 叶子节点(特指空节点)是黑色的

4. 每个红色节点的子节点都是黑色的

5. 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同

特点:速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍

List

特点 

1. 它是一个元素存取有序的集合。例如 ,存元素的顺序是112233。那么集合中 ,元素的存储就是按照11 2233的顺序完成的)。

2. 它是一个带有索引的集合 ,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。

3. 集合中可以有重复的元素 ,通过元素的equals方法 ,来比较是否为重复的元素。

常用方法

public void add(int index, E element) : 将指定的元素 ,添加到该集合中的指定位置上。

public E get(int index) :返回集合中指定位置的元素。

public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。

public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

List的子类

ArrayList集合

java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢 ,查找快 ,由于日常开发中使用最多的功能为 查询数据、遍历数据,是最常用的集合

Linked List集合

java.util.LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。

常用方法

public void addFirst(E e) :将指定元素插入此列表的开头。

public void addLast(E e) :将指定元素添加到此列表的结尾。

public E getFirst() :返回此列表的第一个元素。

public E getLast() :返回此列表的最后一个元素。

public E removeFirst() :移除并返回此列表的第一个元素。

public E removeLast() :移除并返回此列表的最后一个元素。

public E pop() :从此列表所表示的堆栈处弹出一个元素。

public void push(E e) :将元素推入此列表所表示的堆栈。

public boolean isEmpty()  :如果列表不包含元素 ,则返回true

Set接口

Hash Set集合

java.util.HashSet是set接口的一个实现类 ,它所存储的元素是不可重复的 ,并且元素都是无序的(即存取顺序不一致)java.util.HashSet底层的实现其实是一个java.util.HashMap支持 。

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> ) :将集合中元素按照指定规则排序。

Comparable和Comparator两个接口的区别

Comparable :强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序 ,类的compareTo方法 被称为它的自然比较方法。只能在类中实现compareTo()一次 ,不能经常修改类的代码实现自己想要的排序。实现  此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort )进行自动排序 ,对象可以用作有序映射中 的键或有序集合中的元素 ,无需指定比较器。

Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sortArrays.sort ),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set 有序映射)的顺序 ,或者为那些没有自然顺序的对象collection提供排序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值