集合的知识点

集合与数组的对比

长度:

集合的长度是可以改变的。

数组的长度是固定的。

存储类型:

数组可以存储基本数据类型和引用数据类型。

集合只可以存储引用数据类型,如果想存储基本数据类型需要把它们变成包装类。

集合的特点:

(1)集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。

(2)集合非常适合做元素个数不确定,且要进行删除操作的业务场景。

(3)集合提供了许多丰富,好用的功能,而数组的功能很单一。

集合使用最多的类:ArrayList类

1:创建集合的对象

ArrayList<引用数据类型> 对象名=new ArrayList<>();

ArrayList<基本数据类型的包装类> 对象名=new ArrayList<>();

注意:集合可以存储自定义类型的对象

ArratList<类名> 对象名=new ArrayList<>();集合容器中存储的是每个对象在堆内存中的地址值。

ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。

集合支持泛型。

集合和泛型不支持基本类型,只支持引用数据类型。

2:ArrayList常用成员方法

boolean add(E e)      作用:添加元素,返回值表示是否添加成功

boolean  remove(E e)    作用:删除指定元素,返回值表示是否删除成功。如果集合中有相同的元素,只会删除第一次出现的元素。

E  remove(int  index)      作用:删除指定索引的元素,返回被删除元素

E  set(int  index,E e)      作用:修改指定索引下的元素,返回原来的元素

E get(int  index)      作用:获取指定索引对的元素

int size()         作用:集合的长度,也就是集合中元素的个数

ArrayList遍历并删除元素:(1)从前往后边遍历边删除元素之后,马上后退一步i--就可以了

(2)从后往前遍历,边遍历边删除。

Collection集合体系

集合的代表是Collection接口。

接口:Collection  容器接口,List  列表接口,Set 集合接口

Collection包括List,Set.

ListSet
ArrayList    数组列表类HashSet  哈希集合类
LinkedList   链表类SortedSet   有序集合接口(包括TreeSet树集合类)

Collection集合特点:

List系列集合:添加的元素是有序,可重复,有索引。

ArrayList,LinekdList:有序,可重复,有索引。

Set系列集合:添加的元素是无序,不重复,无索引。

 HashSet:无序,不重复,无索引;

LinkedHashSet:有序,不重复,无索引;

TreeSet:按照大小默认升序排序,不重复,无索引。

TreeSet集合自定义排序规则有几种方式?

两种。(1)类实现Comparable接口,重写比较规则。

(2)集合自定义Comparator比较器对象,重写比较规则。

Set去重复原因:先判断哈希值,再判断equals.

如果想让Set集合认为两个内容相同的对象是重复的应该重写对象的hashCode和equals方法。

Collection集合:

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

Collection集合的遍历方式:

方式一:迭代器

方式二:foreach/增强for循环

方式三:lambda表达式

迭代器遍历概述:

遍历就是一个一个的把容器中的元素访问一遍;

迭代器在Java中的代表是Iterator,迭代器是集合的专用遍历方式。

Iterator<E> iterator():    得到迭代器对象,默认指向当前集合的索引0

增强for循环:

增强for循环:既可以遍历集合也可以遍历数组。

它是JDK5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。

实现Iterable接口的类才可以使用迭代器和增强for,Collection接口已经实现Iterable接口。

格式:for(元素数据类型  变量名:数组或者Collection集合){

 //在此处使用变量即可,该变量就是元素

}

Lambda表达式遍历集合:

Collection结合Lambda遍历的API:

default void forEach(Consumer<?super T>action):   结合Lambda遍历集合。

遍历举例:​

Collection<String>  lists=new ArrayList<>();

lists.forEach(s->{System.out.println(s);});

数据结构:

数据结构概述:

数据结构是计算机底层存储,组织数据的方式。是指数据相互之间是以什么方式排列在一起的。

通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。

常见的数据结构:

栈:执行特点为后进先出,先进后出。

队列:执行特点为先进先出,后进后出。

数组:数组是一种查询快,增删慢的模型。

(1)查询速度快:查询数据通过地址值和索引定位,查询任意数据耗时相同。

(2)删除效率低:要将原始数据删除,同时后面每个数据前移。

(3)添加效率极低:添加位置后的每个数据后移,再添加元素。

链表:链表是一种查询慢,增删相对快的模型。链表有单向链表和双向链表两个种类。

(1)链表中的元素是在内存中不连续存储的,每个元素节点包含数据值和下一个元素的地址。

(2)链表查询慢。无论查询哪个数据都要从头开始找。

(3)链表增删相对快。

二叉树

二叉查找树:又称二叉排序树或二叉搜索树。

特点:(1)每一个节点上最多有两个子节点。

(2)左子树上所有节点的值都小于根节点的值。

(3)右子树上所有节点的值都大于根节点的值。

平衡二叉树:是在满足查找二叉树的大小规则下,让树尽可能矮小,以此提高查数据的性能。

红黑树:(1)每一个节点或是红色的,或者是黑色的,根节点必须是黑色。

(2)如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,叶节点是黑色的。

(3)如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)

(4)对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

不可变集合

特点:定义完成后不可以修改,或者添加,删除。

在List,Set,Map接口中,都存在of方法,可以创建一颗不可变的集合。

static<E>  List<E> of(E...elements)   创建一个具有指定元素的List集合对象。

static<E>  Set<E> of(E...elements)    创建一个具有指定元素的Set集合对象。

static<K,V> Map <K,V> of(E...elements) 创建一个具有指定元素的Map对象。

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值