Java 进阶学习笔记 —— 数据结构、List集合、List的子类、Set接口、Collections
2021/4/13 14:25:47
本文主要是介绍Java 进阶学习笔记 —— 数据结构、List集合、List的子类、Set接口、Collections,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第一章 数据结构
数据存储的常用结构:栈、队列、数组、链表、红黑树。
- 栈:入口和出口在同一侧,先进后出;
- 队列:入口和出口在集合的两侧,先进先出;
- 数组:
查询快:数组地址连续,通过数组首地址找到数组,通过数组索引快速查找元素;
增删慢:数组的长度是固定的,要增删元素,必须创建一个新数组,把原数组的数据复制过来并销毁原数组(在堆内存中,频繁地创建数组、销毁数组,效率低下); - 链表:每一个元素包含了自己的数据、地址、下一个元素的地址;
查询慢:链表中地址不是连续的,每次查询元素,都必须从头开始查询;
增删快:链表结构,增删一个元素对链表整体结构没有影响,所以增删快;
单向链表:链表中只有一条链,不能保证元素顺序(存储和取出元素顺序有可能不一样);
双向链表:链表中有两条链,一条专门记录元素的顺序,是一个有序集合; - 红黑树:
二叉树:分支不能超过两个;
排序树/查找树:二叉树的基础上,左子树小,右子树大;
平衡树:左右孩子数量相等;
红黑树:
趋近于平衡树,查询速度非常快,查询叶子节点的最大次数和最小次数不超过2倍;
红黑树约束(了解即可):
5.1 节点可以是红色或黑色;
5.2 根节点和叶子节点(空节点)是黑色;
5.3 红色节点的子节点是黑色;
5.4 每一个节点到每一个叶子节点的所有路径上黑色节点数量相同;
第二章 List集合
java.util.List接口 extends Collection接口
List接口的特点:
- 有序的集合,存储和取出元素的顺序是一致的;
- 有索引,包含了一些带索引的方法;
- 允许存储重复的元素;
List接口带索引的方法(特有):
- 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: 索引越界异常,集合会报;
ArrayIndexOutOfBoundsException: 数组索引越界异常;
StringIndexOutOfBoundsException: 字符串索引越界异常;
第三章 List的子类
ArrayList集合
底层其实是一个数组结构,查询快,增删慢;
LinkedList集合
java.util.LinkedList
LinkedList集合的特点:
- 底层是一个链表结构,查询慢,增删快;
- 里面包含了大量操作首尾元素的方法;
注意:使用LinkedList特有的方法不能使用多态;
- public void addFirst(E e); 将指定元素插入此列表的开头
- public void addLast(E e); 将指定元素插入此列表的结尾,等效于add方法
- public void push(E e); 将指定元素推入此列表所表示的堆栈
- public void getFirst(); 返回此列表的第一个元素
- public void getLast(); 返回此列表的最后一个元素
- public void removeFirst(); 移除并返回此列表的第一个元素
- public void removeLast(); 移除并返回此列表的最后一个元素
- public void pop(); 从此列表所表示的堆栈弹出一个元素
- public boolean isEmpty(); 如果列表不包含元素,则返回true
- public void clean(); 清空集合中的元素;
Vector集合
已经被ArrayList代替,了解即可;
第四章 Set接口
java.util.Set接口 extends Collection接口
Set接口的特点:
- 不允许存储重复的元素
- 没有索引,没有索引的方法,也不能使用普通的for循环遍历;
HashSet集合
java.util.HashSet特点:
- 不允许存储重复元素
- 没有索引,没有索引的方法,也不能使用普通的for循环遍历,可以用迭代器iterator或增强for遍历;
- 是一个无序集合,存储元素和取出元素的顺序有可能不一致;
- 底层是一个哈希表结构(查询的速度很快);
哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个模拟出的逻辑地址,不是数据实际存储的物理地址);
Object类有一个方法可以获取对象的哈希值:int hashCode();
native: 代表该方法调用的是本地操作系统的方法;
HashSet集合存储数据的结构(哈希表):
JDK1.8前:哈希表 = 数组 + 链表;
JDK1.8后:哈希表 = 数组 + 链表;哈希表 = 数组 + 红黑树(提高查询速度);
哈希表的特点:速度快;
哈希冲突:两个元素不同,但哈希值相同;
哈希表的数组结构:相同元素一个分组,链表/红黑结构把相同的哈希值元素连接在一起;
如果链表的结构超过了8位,那么就会把链表转换为红黑树,提高查询速度;
Set集合在调用add方法时,会调用元素的hashCode方法和equals方法判断元素是否重复;
HashSet存储自定义类型元素
HashSet存储自定义类型元素,必须重写该类型的hashCode和equals方法,保证同属性值的元素只存储一次;
LinkedHashSet
java.util.LinkedHashSet集合 extends HashSet集合
LinkedHashSet集合特点:
不允许重复,底层是一个哈希表(数组+链表/红黑树)+链表,多了一条链表记录元素存储顺序,保证元素有序;
可变参数
JDK1.5之后出现的新特性;
使用前提:当方法的参数列表数据类型确定,但参数个数不确定;
使用格式:
定义方法时用:修饰符 返回值类型 方法名(数据类型…变量名){}
原理:可变参数底层就是一个数组,根据传递参数个数的不同创建不同长度的数组,传递的参数可以是0(不传递)、1、2…多个;
注意事项:
- 一个方法的参数列表,只能有一个可变参数;
- 如果方法的参数有多个,那么可变参数必须写在参数列表的末尾;
- 如果有多个可变参数,可以用其终极写法:修饰符 返回值类型 方法名(Object…obj){};
第五章 Collections
java.utils.Collections是集合工具类,用来对集合进行操作;
- public static boolean addAll(Collections c, T…elements); 往集合c中添加一些元素;
- public static void shuffle(List<?> list); 打乱集合顺序;
- public static void sort(List list); 将集合中元素按照默认规则排序;
注意:
sort(List list)使用前提:该排序的集合里存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则; - public static void sort(List list, Comparator<? Super T>);
Comparable和Comparator的区别:
Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法;
Comparable接口的排序规则, (自己)this - 参数:升序;
Comparator:相当于第三方裁判,比较另外两个,重写compare方法;
Comparator比较规则:o1-o2升序;
这篇关于Java 进阶学习笔记 —— 数据结构、List集合、List的子类、Set接口、Collections的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)