Java学习之路 —— 异常、集合

文章目录

  • 1. 异常
  • 2. 集合
    • 2.1 遍历
      • 2.1.1 迭代器
      • 2.1.2 增强for循环
      • 2.1.3 Lambda
    • 2.2 List
    • 2.3 Set
      • 2.3.1 HashSet
      • 2.3.2 LinkedHashSet
      • 2.3.3 TreeSet
    • 2.4 Map

1. 异常

Exception:叫异常,是程序员可以捕捉的。异常又分为了2类:

  • 运行时异常:运行时出现的异常(数组索引越界),继承自RuntimeException
  • 编译时异常:编译阶段出现错误提醒(日期解析异常)

解决异常有2种方式:

  • 在方法上使用throws关键字,可以讲方法内部出现的异常跑出去给调用者处理
  • 捕获异常(try…catch)

自定义异常类

同样,也分为两大类,自定义运行时异常继承自RuntimeException;自定义编译时异常继承自Exception

// 继承自runtimeexception
public class AgeillegalRuntimeException extends RuntimeException{public AgeillegalRuntimeException() {}public AgeillegalRuntimeException(String message) {super(message);}
}
public class Main2 {public static void main(String[] args) {try {saveAge(160);System.out.println("底层执行成功");} catch (Exception e) {e.printStackTrace();System.out.println("底层出现了bug");}}public static void saveAge(int age) {if(age > 0 && age < 150)System.out.println("年龄成功保存: " + age);else {// 用一个异常对象封装这个问题// 抛出异常throw new AgeillegalRuntimeException("age is illegal, your age is " + age);}}
}

这里记得区分throws是用在方法上的,throw是用在函数体中的。

2. 集合

这一部分是重点内容,在学习的时候,最好搭配力扣食用,学以致用才能最好的掌握。

在Java中,集合分为了2大类,分别是Collection和Map,而Collection又分为了List和Set等。

  • List系列集合:添加的元素是有序、可重复、有索引
  • Set系列集合:添加的元素是无序、不重复、无索引
    • HashSet:无序、不重复、无索引(对应unordered_set)
    • LinkedHashSet:有序、不重复、无索引
    • TreeSet:按照大小默认升序排序、不重复、无索引(对应set)
      在这里插入图片描述
      由于Collection是相当于祖宗类,所以Collection有的一些方法,它的子类都有,比如isEmptyadd等等

2.1 遍历

2.1.1 迭代器

Java的迭代器主要有2个常用方法:

  • boolean hasNext():询问当前位置是否有元素存在
  • E next():获取当前位置的元素,并将迭代器对象指向下一个元素处
Iterator<Integer> it = c.iterator();while(it.hasNext()) {System.out.println(it.next());
}

2.1.2 增强for循环

这个就和C++11的for循环一样,很好理解,数组和集合都可以。

2.1.3 Lambda

JDK8开始有了Lambda,就有了这个遍历方式。用到的是forEach,但本质其实还是增强for循环。

public static void test2() {Collection<Integer> c = new ArrayList<>();c.add(1);c.add(2);c.add(3);c.add(5);c.forEach(System.out::println);}

2.2 List

List集合特点:有序、可重复、有索引

ArrayList和LinkList底层采用的数据结构不同,应用场景不同

  • ArrayList:C++的vector,动态数组,添加第一个元素时数组大小为10,后续1.5倍扩容
  • LinkList:C++的list,双向链表,不是连续存储的
    • LinkList有一些特有方法
    • 我们一般也是用LinkList来实现队列、栈的。
      在这里插入图片描述

2.3 Set

  • Set系列集合:添加的元素是无序、不重复、无索引
    • HashSet:无序、不重复、无索引(对应C++的unordered_set)
    • LinkedHashSet:有序、不重复、无索引
    • TreeSet:按照大小默认升序排序、不重复、无索引(对应C++的set)

无序说明不能通过get方法获取元素。


2.3.1 HashSet

JDK8之前,HashSet都是:数组 + 链表。

JDK8之后的HashSet是由:数组 + 链表(哈希冲突)+ 红黑树(链表修改)组成的
当链表长度超过8,且数组长度>=64时,自动将链表转成红黑树。

2.3.2 LinkedHashSet

是由数组 + 链表(哈希冲突)+ 红黑树(链表修改)组成的
每个元素都额外多了一个双链表机制记录了他前后元素的位置。

相当于是LinkedList多了一个HashSet,LRU就是基于此。

2.3.3 TreeSet

是由红黑树实现的。

自定义排序,采用Lambda:

Set<Student> st = new TreeSet<>((o1, o2)->Double.compare(o1.height, o2.height));

2.4 Map

  • HashMap:无序、不重复、无索引(用的最多)(C++的unordere_map)
  • LinkedHashMap:有序、不重复、无索引
  • TreeMap:按照大小默认升序排序、不重复、无索引(C++的map)

关于用法,基本都和Set的差不多。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174740.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web安全:Vulfocus 靶场搭建.(漏洞集成平台)

Web安全&#xff1a;Vulfocus 靶场搭建.&#xff08;漏洞集成平台&#xff09; Vulfocus 是一个包含了多种漏洞靶场的镜像。每个靶场都有具体的漏洞环境和攻击点。Vulfocus 的靶场包括了 Web 安全漏洞、系统安全漏洞、网络安全漏洞、密码学漏洞等多种类型。通关这个靶场我们可以…

IP-guard flexpaper远程命令执行漏洞复现 [附POC]

文章目录 IP-guard flexpaper RCE漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 IP-guard flexpaper RCE漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测…

【EI会议征稿】第四届环境资源与能源工程国际学术会议(ICEREE 2024)

第四届环境资源与能源工程国际学术会议&#xff08;ICEREE 2024&#xff09; 2024 4th International Conference on Environment Resources and Energy Engineering ICEREE&#xff08;2020-2023&#xff09;大会先后在珠海&#xff0c;昆明&#xff0c;长沙成功召开。会议主…

Adobe premiere裁剪视频尺寸并转为GIF格式

第 1 步&#xff1a;裁剪视频 修改序列设置以适应裁剪之后的图像区域&#xff1b;序列中的编辑模式不能使用默认的&#xff0c;这里使用的是“ProRes RAW” 第 2 步&#xff1a;设置背景色 需要设置“颜色遮罩”的大小和颜色&#xff0c;颜色遮罩放在下面。 第 3 步&#xff1…

影响因子10月修正!多本期刊上涨,最高IF达54.8!

【SciencePub学术】 每年的影响因子基本都在6月底发布&#xff0c;但是由于数据不全等原因&#xff0c;部分期刊未能及时获得影响因子&#xff0c;或者影响因子有一定误差。因此&#xff0c;每年科睿唯安还会在10或11月份对当年的影响因子进行更新&#xff0c;主要包括补录和修…

C# .NET Core API Controller以及辅助专案

准备工作 Windows 10Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)C#将方法封装(据说可以提高效率,就像是我们用的dll那种感觉新增专案作为我们API的辅助专案(作用类似dll&#xff0c;此处&#xff0c;你也可以在你自己的API专案里建文件夹&#xff0c;但…

VBA技术资料MF82:替换文件夹中文件名中的字符

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

计算机视觉:使用opencv进行直线检测

1 直线检测介绍 在图像处理中&#xff0c;直线检测是一种常见的算法&#xff0c;它通常获取n个边缘点的集合&#xff0c;并找到通过这些边缘点的直线。其中用于直线检测&#xff0c;最为流行的检测器是基于霍夫变换的直线检测技术。 1.1 什么是霍夫变换 霍夫变换&#xff08…

企业年报API:打开企业经营大数据的新视角

引言 随着数字化转型的深入推进&#xff0c;企业年报API作为企业信息化建设中的重要组成部分&#xff0c;受到了越来越多企业和机构的关注和重视。而且&#xff0c;随着中国经济的快速发展&#xff0c;企业年报也成为投资者、监管机构以及相关利益方了解企业经营状况的重要途径…

页面的动静分离

动静分离&#xff1a; 访问静态和动态页面分开 实现动态和静态页面负载均衡 实验1&#xff1a; 准备三台虚拟机&#xff1a; 1台nginx代理服务器&#xff1a; 192.168.120.30 2台tomcat&#xff1a; tomcat1&#xff1a;192.168.120.20 tomcat2&#xff1a;192.168.12…

DBeaver clickhouse 时区不对 时间少了8小时,本人的有效,网上好多都是扯犊子

特别注意&#xff1a;use_time_zone Asia/Shanghai use_server_time_zone true

Maven介绍及配置

目录 一.Maven 1.介绍 坐标 仓库 1&#xff09;中央仓库 2&#xff09;本地仓库 3&#xff09;私服 配置国内源 配置过程 二.Maven功能 2.项目构建 3.依赖管理 Maven Help插件 安装 ​使用 一.Maven 1.介绍 坐标 唯一的&#xff0c;通过以下代码的三个键值对确…