数据结构,List,Set,可变参数,Collections工具类

1 常见的数据结构

1.1 栈

是运算受限线性表。受限表现为仅在一端进行插入和删除操作。
栈的特点:
1.先进后出
2.栈的入口出口都在栈的顶端
栈的结构图如下:
在这里插入图片描述
压栈:存元素。
弹栈:取元素。

1.2 队列

队列是运算受限线性表。受限表现为在一端进行插入,在另一端进行删除。
队列的特点:
1.先进先出
2.队列的入口出口各占一侧
队列的结构图:
在这里插入图片描述

1.3 数组

数组是有序的元素序列
数组的特点:
1.查找元素快。(按索引查找)
2.增删元素慢。(每次增删数据,都会创建一个新的数组对象)

1.4 链表

链表由一系列结点构成。结点由数据域指针域构成。
链表特点:
1.多个结点之间通过地址连接。
2.查找元素慢。(每次都要从头开始查找)
3.增删元素快。(只需修改连接元素的地址即可)
链表结构:
在这里插入图片描述

1.5 红黑树

二叉树是结点不超过2的有序树。
结构图:
在这里插入图片描述
红黑树本身是二叉树。
红黑树的约束:
1.节点可以是红色的或者黑色的。
2.根节点是黑色的。
3.叶子节点(特指空节点)是黑色的。
4.每个红色节点的子节点都是黑色的。
5.任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同。

2 List集合

List接口继承Collection接口。
List集合的特点:
1.元素存取有序的集合。
2.带索引,可以通过索引访问数据。
3.可以有重复元素。

2.1 常用方法

public void add(intindex,Eelement);将指定的元素,添加到该集合中的指定位置上。
public E get(intindex);返回集合中指定位置的元素。
public E remove(intindex);移除列表中指定位置的元素,返回的是被移除的元素。public E set(intindex,Eelement);用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

2.2 List的子类

1 ArrayList(详情见上篇)

内部是数组结构。

2 LinkedList

内部是双向链表结构。
在这里插入图片描述
因为查找首位元素方便,所以其中有大量的针对首尾元素的方法。
较为常用的有:

public void addFirst(E e);将指定元素插入此列表的开头。
public void addLast(E e);将指定元素添加到此列表的结尾。
public E getFirst();返回此列表的第一个元素。
public E getLast();返回此列表的最后一个元素。
public E removeFirst();移除并返回此列表的第一个元素。
public E removeLast();移除并返回此列表的最后一个元素。
public boolean isEmpty();如果列表不包含元素,则返回true

3 Set集合

Set集合中元素无序,并且元素不能重复

3.1 HashSet集合

1 内部结构

HashSet集合内部采用哈希表结构。哈希表底层又是由数组加链表组成,后版本中,当同一哈希值的不同对象超过8,则会将链表变为红黑树。
在这里插入图片描述

2 存储流程

先调用hashCode方法,获得对象的哈希值,在数组中寻找有无此哈希值,没有,则存入。如果有,则调用equals方法判断对象是否与已存的对象相同,如果相同,则不存入。如果不同,则存入。

3 存储自定义元素

存储自定义元素,需重写hashCode方法和equals方法,建立自己的比较方式,才能使对象唯一。

3.2 LinkedHashSet集合

内部由数组加链表的结构组成。与HashSet的区别在于,它存进去的元素是有序的。

4 可变参数

如果一个方法需要接受多个类型相同的参数,并且个数不确定,这使就可以使用可变参数
定义格式如下:

修饰符 返回值类型 方法名(参数类型... 形参名){  }

注意事项
1.其内部结构是数组
2.如果方法有多个参数,并且有可变参数,则可变参数必须在最后一个,并且只能有一个

5 Collections工具类

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

2 Comparator接口

public static void sort(List list);这个方法排序,默认被排序的类型实现了Comparable接口。例如String类型,它实现了Comparable接口,但已经写死,不能修改。如果想自定义排序规则,则需用到Comparator接口。
例如:

Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.charAt(0) - o1.charAt(0);
            }
        });

与Comparable的区别

Comparatable:强行对实现它的每个类的对象进行整体排序。类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。
Comparator:强行对某个对象进行排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值