Java基础05--算法-正则表达式-异常-Collection集合-Map集合-Stream流

一、算法

解决某个实际问题的过程和方法

1.排序算法

①冒泡排序

每次从数组中找出最大值放到数组的后面去

②选择排序

每轮选择当前位置,开始找后面的较小值与该位置交换
优化:就是每轮查找到最小的就记住那个索引,最后在交换一次

2.查找算法

前提条件:数组的数据必须是有序的

核心思想:每次排除一般的数据

二、正则表达式

1.认识正则表达式

就是由一些特定的字符组成,代表的是一个原则

作用一:用来校验数据是否合法-更简单便捷

作用二:在一段文本中查找满足要求的内容

2.书写规则

String提供了一个匹配正则表达式的方法:

public boolean matches(String regex),判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false

regex:带[ ]只能匹配单个字符

注意:(?i)忽略大小写;要表示字符\,要输入\\,要表示.,要输入\\.

3.用于查找信息

固定代码:

4.用于搜索替换、分割内容

将重复的替换成一个:后面替换需要前面的内容

分割:

三、异常

程序出现的问题

1.认识异常

异常的体系:

Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来,说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。
Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会Exception以及它的孩子来封装程序出现的问题。
--运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常〈如:数组索引越界异常)--认为你水平不会出现这种问题
--编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)--受检查异常

对于编译时异常的处理方式

2.自定义异常

用异常对象来封装问题,可以让别人知道使用时是否正确

自定义运行时异常

throw关键字会将抛出异常对象给调用者

自定义编译时异常(用法与运行时差不多,但是会强烈要求修改)

throws 用在方法上,抛出方法内部的异常

3.处理异常

①常见处理方式

底层异常往外送,在最外层捕获异常,然后记录异常信息,显示合适信息给用户

代码上的处理:throws,try catch

一般直接抛Exception异常

②捕获异常,尝试修复

四、集合框架-Collection

1.认识集合

集合体系结构

对于Collection集合:

Collection集合特点:

List系类集合:添加的元素是有序的、可重复的、有索引的

Set系列集合:添加的元素是无序、不重复、无索引的
--HashSet:无序、不重复、无索引;
--LinkedHashSet:有序、不重复、无索引。
--TreeSet:按照大小默认升序排序、不重复、无索引。

2.collection包含的常见方法

--所有子孙都能使用的

加一个addAll:

3.Collecion的遍历方式

没有for遍历因为,Set没有索引

①迭代器 

迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。

c为一个ArrayList类对象

②增强for循环

可以用来遍历集合或数组

若遍历集合,就是使用迭代器来遍历,集合.for 再回车就可以快捷

③Lambda表达式 -forEach

简化过程:

3.集合存储对象的原理

集合存储的是对象的地址

4.List集合

①特点、特有方法

特有方法:

②ArrayList集合的底层原理

存储、组织数据的方式不同

基于数组实现的,
数组的特点:

  1. 查询速度快:根据索引查询数据快,通过地址值和索引定位,查询任意数据耗时相同
  2. 删除效率低:可能需要把后面很多数据进行前移
  3. 添加效率低,可能需要把后面很多数据后移,再添加元素;或者也可能需要进行数组的扩容

 应用场景:根据索引查询数据,比如根据随机索引取数据或者数据量不是很大时
不适合场景:数据量大的同时,又频繁的进行增删操作

③LinkedList集合的底层原理

基于双链表实现的

链表:

单向链表

链表中的结点是独立的对象,在内存中是不连续的,每个节点包含数据值和下一个结点的地址

链表的实现:

记住头结点可以知道后续所有数据

链表的特点:

  1. 查询慢,无论查询那个数据都要从头开始找
  2. 链表增删相对快
 双向链表:

特点:查询比数组慢,比单向链表快,但是对首尾元素进行增删改查的速度是极快的。

LinkedList的特有方法: 

LinkedList的应用场景:

可以用来设计队列:先进先出,后进后出,频繁操作首尾元素,序列要有序

可以用来设计栈:后进先出,先进后出,要操作首部元素

高级写法:

5.Set集合

无序,添加数据的顺序和获取出的数据顺序不一致;不重复;无索引

经典代码:

Set没有常用的特有功能,常用的就是Collection提供的

①HashSet集合

哈希值:

--就是一个int类型的数值,Java中每个对象都有一个哈希值
--Java中的所有对象,都可以调用Obejct类提供的hashCode方法,返回该对象自己的哈希值。

HashSet集合的底层原理:

--基于哈希表实现的

--哈希表是一种增删改查数据,性能都比较好的数据结构

哈希表:

--JDK8之前,哈希表=数组+链表

--JDK8开始,哈希表=数组+链表+红黑树

加载因子是16*0.75,当占满12个后会扩容

当扩容长度达到当链表长度超过8,且数组长度>=64时,自动将链表转成红黑树。

 

红黑树就是,根据新元素进来,根据哈希值比老元素大就往右走,小就往左走,找数据的时候就可以基于二分法查找。

二叉树                                                                                               

                                                                                                               每个节点包含数据

红黑树,就是可以自平衡的二叉树

HashSet集合去重复的机制

是根据Hash值大小来判断是否一样,但是内容一致的不同对象的Hash值是不同的,所以不能去重复
--如果想要实现对内容一样的两个不同对象去重复:

重写那个对象的hashCode()和equals()方法:generate

②LinkedHashSet

添加元素的顺序,和集合内的顺序是一致的。

LinkedHashSet底层原理

依然是基于哈希表实现的

但是,每个元素都额外的多了一个双链表的机制记录它前后元素的位置

③TreeSet集合

可排序,默认升序排序

基于红黑树实现,在添加元素时,就会进行比较添加

注意:

自定义排序规则--Arrays中的sort方法

若对象中右自己的排序规则,TreeSet集合的参数构造器也有排序规则,优先采用TreeSet的

排序规则的数据有相同的会去除对象

5.总结,如何选择

6.集合的并发修改异常

使用迭代器遍历集合时,又同时在删除集合中的数据,程序就会出现并发修改异常的错误。

有索引可以倒着遍历删除;或者从前往后遍历,但删除元素后做i--操作
无索引的不能使用集合所带的remove方法,使用迭代器的remove

增强for、Lambda表达式没办法解决并发问题

7.可变参数

认识:就是一种特殊形参,定义在方法、构造器的形参列表里,格式是:数据类型...参数名称;

特点:可以不传数据给它;可以传一个或者同时传多个数据给它;也可以传一个数组给它。

好处:常常用来灵活的接收数据。

注意:

  1. 可变参数在方法内部就是一个数组
  2. 一个形参列表中,只能有一个可变参数
  3. 可变参数必须放到形参列表的最后面

8.Collections类-工具类

 Collection<? super T>:表示泛型集合,T是它的子类,T...elements,

只能支持List集合进行排序

五、集合框架-Map

1.认识Map

需要存储一一对应的数据时,就可以考虑使用Map集合来做

特点:由键决定,值只是一个附属品,但是不做要求的

很像Set集合

经典代码:

添加不是add而是put

2.Map常用方法

3.Map的遍历方式

①键找值

需要的方法

②键值对

所需方法:

就是将键值变成一个类对象,Entry,然后使用getKey,获得键,getValue获得值

③Lambda表达式

内部就是使用第二种方法

需要方法:

4.HashMap

HashMap跟HashSet的底层原理一摸一样,都是基于哈希表实现的

实际上:Set系列集合的底层就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。

3.LinkedHashMap

底层数据结构依然是基于哈希表实现的,只是每个键值对元素又额外的多了一个双链表的机制记录元素顺序(保证有序)。

4.集合的嵌套

六、Stream

1.认识Stream流

也叫Stream流,是Jdk8开始新增的一套APl (java.util.stream.*),可以用于操作集合或者数组的数据。

 优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作集合或者数组中的数据,代码更简洁,可读性更好。

 

2.常用方法

①获取Stream流


②Stream流常见的中间方法


map方法可以对集合做操作,让其保留特定元素

concat:合并方法

③Stream流常见的终结方法



  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值