Java-集合、方法引用、异常
文章平均质量分 67
介绍Java的集合、方法引用、异常
巧克力拌面
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1.1.单列集合顶层接口Collection的遍历方式
循环条件(it.hasNext())指的是当前位置有元素时返回true,进行循环体语句,上述图片中,list为一个集合的名称,s此时只是一个第三方变量,与集合list没关系。如果要删除,可以用迭代器提供的remove方法进行删除。当指到了一个没有元素的位置时it.hasNext()返回false,循环停止。第三个方法(无返回值)---->此时要用迭代器里的方法去删除。迭代器遍历完毕时,可以用集合的方法进行增加或者删除。(迭代器可以理解为指针,比如上述图片中的蓝色箭头)用一个变量接收获取到的元素,再使用。原创 2024-05-19 15:05:08 · 434 阅读 · 0 评论 -
1.2.List集合中常见的方法和五种遍历方式
/运行结果为[aaa, bbb, qqq, ccc]//void add(int index,E element)->在此集合中的指定位置插入指定的元素。//E remove(int index)->删除指定索引处的元素,返回被删除的元素(E代表元素)//E set(int index,E element)->修改指定索引处的元素,返回被修改的元素。//不能用集合添加即list.add("qqq");//当中额外添加了一个方法:在遍历的过程中,可以添加元素->不能用add即集合添加元素的方法。原创 2024-05-19 19:32:08 · 1538 阅读 · 0 评论 -
1.3.LinkedList集合及迭代器的源码分析
iterator源码如下:分析:解决方案:在使用迭代器或者是增强for遍历集合的过程中,不要使用**集合的方法**去添加或者删除元素即可。原创 2024-08-10 23:03:06 · 430 阅读 · 0 评论 -
1.4.泛型类,泛型方法,泛型接口以及泛型扩展
下拉框的第一个提示的Object e代表可以添加任意类型的数据//构造//set/getreturn age;////1.创建集合的对象//2.添加数据//3.遍历集合获取里面的每一个元素//此时没有泛型,所有元素都提升为Object型/*运行结果为123aaa*/如果所有方法数据类型都不确定,建议用泛型类如果只是某个方法中出现了不确定的数据类型,建议用泛型方法。原创 2024-05-31 20:56:42 · 569 阅读 · 0 评论 -
1.5.泛型的通配符和综合练习
泛型的通配符->关键点:用来限定类型的范围泛型的通配符表示不确定的类型 也可以进行类型的限定->两种写法:?extends E:表示可以传递E或者E所有的子类类型?super E:表示可以传递E或者E所有的父类类型。原创 2024-07-22 19:41:55 · 390 阅读 · 0 评论 -
1.6.HashSet,LinkedHashSet详解
LinkedHashSet集合比HashSet集合效率低,因为LinkedHashSet集合在哈希表的基础上又多做了一些事(操作数据顺序)。原创 2024-08-10 22:45:05 · 1093 阅读 · 0 评论 -
1.7.TreeSet的排序方式
例如字符串排序:"aaa","aba","qwer","ab","cd"排序后为:"aaa","ab","aba","cd","qwer"(默认是升序排序)从第一个开始比,只要发现大的就停止比较,对于"ab"和"aba","ab"前两个和"aba"一样,"ab"在第三个比"aba"少一个字母,默认比"aba"小。需求:创建TreeSet集合,并添加3个学生对象学生对象属性:姓名,年龄。要求按照学生的年龄进行排序同年龄按照姓名字母排列(暂不考虑中文)同姓名,同年龄认为是同一个人错解:。原创 2024-08-14 22:53:03 · 1648 阅读 · 0 评论 -
1.8.Map系列集合
注:Map集合是接口(不能实例化,只能创建实现类对象-->不能new Map),而且存的是一对对象(键和值)-->泛型要写两个。原创 2024-08-14 23:12:38 · 755 阅读 · 0 评论 -
1.9.HashMap基本的使用
HashMap集合是Map集合中最为常用的一个集合。HashMap集合中,如果键存储的是字符串型和基本数据类型如整型,那么不重写hashCode方法和equals方法也能保证键的唯一性HashMap集合中,如果键存储的是引用数据类型如学生类型,那么必须重写hashCode方法和equals方法才能保证键的唯一性,否则无法实现键的唯一性HashMap集合中,无法保证值的唯一性。原创 2025-02-26 19:00:34 · 524 阅读 · 0 评论 -
1.10.LinkedHashMap和TreeMap的基本使用
2)键相同时,值不同->添加时以后来添加的为准:(添加元素的put方法有两个功能:添加,覆盖)二.TreeMap集合:(Map集合的儿子)1.特点与排序规则:键:整数表示id值:字符串表示商品名称要求:按照id的升序排列和按照id的降序排列按照id的升序排列:id为整型,属于基本数据类型,默认升序排列,所以无需重写比较规则 Integer类里比较规则compare方法:按照id的降序排列:id为整型,属于基本数据类型,默认升序排列,但此时要降序排列,因此要重写比较规则--原创 2024-08-27 18:18:04 · 1072 阅读 · 0 评论 -
1.11.集合HashMap练习
如果第一名学生投A景点,此时就需要到Map集合中键的位置判断A景点是否存在,显然不存在,表示A景点是第一次出现,此时就把景点A添加到键处,值为1->表示第一名学生统计完毕之后,A景点被投了一次票;如果第三名学生投B景点,此时就需要到Map集合中键的位置判断B景点是否存在,显然不存在,表示B景点是第一次出现,此时就把景点B添加到键处,值为1->表示第三名学生统计完毕之后,B景点被投了一次票;因此为了打印出正确的属性值,就需要重写类Student中的toString方法。原创 2025-02-26 19:07:27 · 752 阅读 · 0 评论 -
1.12.可变参数
但上述写法较繁琐,因为要求数据的和,不仅要定义数组,还要调用方法求数组里的数据的和,因此可以进行优化,如下:JDK5中加入了可变参数这一特性, 可变参数:方法形参的个数是可以发生变化的,可以是0、1、2...个,多少个参数都无所谓; 可变参数格式:属性类型...名称, 例如:int...args->可变参数的底层就是一个数组,只不过不需要我们自己创建了,Java会帮我们创建好4.可变参数的小细节:在方法的形参中最多只能写一个可变参数->原因:可以把可变参数理解为一个大胖子,有多少吃多少,原创 2025-02-27 11:37:46 · 230 阅读 · 0 评论 -
1.13.集合工具类Collections
addAll方法中第一个形参的数据类型为Collection<T>,意味着第一个参数是针对单列集合->所以addAll方法只能给单列集合Collection批量添加元素,双列集合Map是不行的addAll方法中第二个形参T...elements是可变参数,意味着无论添加多少个元素都可以shuffle方法的形参List<?> list的数据类型为List<?>,意味着只能传递List的子类集合即ArrayList集合、LinkedList集合和Vector集合。原创 2025-02-28 12:23:59 · 870 阅读 · 0 评论 -
1.14.综合练习1-随机点名器的两种实现方式
也可以元素随机,索引也随机,但这样效率低(时间复杂度和空间复杂度都较高),就不考虑了。原创 2025-02-28 12:25:49 · 222 阅读 · 0 评论 -
1.15.综合练习2-带有概率的随机点名
要想解决本例中随机面即概率的问题,可以在集合中添加7个1和3个0(总共就是10个数),此时7个1在集合中占70%,3个0在集合中占30%,然后可以把集合中的1和0都打乱顺序,再从这个集合中抽1或0,此时抽中1的概率为70%,抽中0的概率为30%注:题目的要求是70%的概率随机到男生,30%的概率随机到女生,这里概率针对的是男生和女生,和男生、女生的姓名无关,因此在满足题目要求下对男生、女生的姓名进行随机抽取是不影响本题的。->此时抽中男生的概率为70%,抽中女生的概率为30%。原创 2025-03-03 13:13:39 · 467 阅读 · 0 评论 -
2.1.方法引用概述
方法弊端:可读性差。原创 2025-03-03 13:19:34 · 505 阅读 · 0 评论 -
2.2.引用静态方法
Function接口中的抽象方法是apply方法,在map方法中已经对apply方法进行了重写,map方法里的apply方法的形参只有一个,且该形参类型是String型,apply方法的返回值是Integer型,apply方法的功能是把形参的字符串转化为整数。上述图片中Integer是整型的包装类,parseInt是Integer类里的静态方法,parseInt方法的作用是把字符串转为整数,parseInt是静态的,可以类名.方法名进行调用,也可以使用类名::静态方法名(方法引用)进行调用。原创 2025-03-03 13:29:25 · 942 阅读 · 0 评论 -
2.3.引用成员方法
/* go对象起初只被定义在initView方法中,但需求中在actionPerformed方法中也需要用到go对象,而且在运行时需要initView方法比actionPerformed方法先运行,意味着如果actionPerformed方法此时要想用到go对象,就必须从initView方法中获取,此时只能通过形参传递go对象,但actionPerformed方法是Java已经写好的,而且是被重写的,Java写actionPerformed方法时形参中没有关于go对象的,原创 2025-03-14 13:31:25 · 745 阅读 · 0 评论 -
2.4.引用构造方法
>3和4.被引用的方法的形参和返回值,需要跟抽象方法的形参和返回值保持一致,而且被引用的方法的功能需要满足当前的需求,这里要注意的是:此时引用的是构造方法,引用构造方法时就不需要考虑方法的返回值了,此时的抽象方法指的是apply方法,apply方法的形参类型是String型,作用是实现将数据封装成Student对象,但在Student类里并没有形参类型是String型、作用是实现将数据封装成Student对象的构造方法,不符合,3.被引用的方法的形参和返回值,需要跟抽象方法的形参和返回值保持一致;原创 2025-03-17 13:07:34 · 935 阅读 · 0 评论 -
2.5.类名引用成员方法
决定了可以引用哪些类中的方法,也就是说使用当前方式进行方法引用,不是所有类里的方法都能引用,这个类是有规定的,这个主要决定于第一个形参(在之前学的引用其他类的成员方法中,该方式可以引用所有类的成员方法,只需要获取到那个类的对象,再进行方法引用即可)。注:这种方法引用带有局限性,不能引用所有类中的成员方法,能引用的方法和抽象方法的第一个参数有关,第一个参数是什么类型的,那么就只能引用这个类中的方法。方法引用的前提条件之一:被引用的方法的形参和返回值,需要和抽象方法的形参和返回值保持一致,原创 2025-03-17 13:09:41 · 870 阅读 · 0 评论 -
2.6.引用数组的构造方法
这里要引用数组的构造方法,所以返回值就不要考虑了,只需要引用的方法结束后创建一个Integer型数组的对象即可,这里直接引用Integer类的构造方法就行,因为Integer类的构造方法结束后就会自动创建Integer类对象,本例中toArray方法里的apply方法的形参是整型,返回值是Integer[],功能是创建一个Integer类型的数组,长度与流中数据的个数一样,并把流里的数据放到创建的这个数组中,引用数组的构造方法的目的是创建一个指定类型的数组对象。集合中存储一些整数,收集到数组当中。原创 2025-03-17 13:11:59 · 412 阅读 · 0 评论 -
2.7.方法引用综合小练习1-转成自定义对象并收集到数组
【代码】7.方法引用综合小练习-转成自定义对象并收集到数组。原创 2025-03-20 21:55:27 · 207 阅读 · 0 评论 -
2.8.方法引用综合小练习2-获取部分属性并收集到数组
首先要明确一点:map方法中所做的操作并没有创建Student对象,因此map方法中使用方法引用的话不能引用构造方法,这里可以直接使用引用静态方法改写,因为map方法在main方法里,main方法是静态的。->因此可以用stream流里的map方法把集合中的学生对象转换为姓名即字符串型(注:这不是过滤元素,不能用filter方法),再使用toArray方法收集到数组中。题目要求是"只获取姓名并放到数组当中",原创 2025-04-08 18:25:37 · 228 阅读 · 0 评论 -
3.1.异常体系介绍
异常:异常就是代表程序出现的问题。误区不是让我们以后不出异常,而是程序出了异常之后,该如何处理。异常介绍可通过Java的API帮助文档中搜索Exception中查找。注:运行时异常包括RuntimeException以及所有继承自RuntimeException的异常,以及Exception类中的一部分非检查异常。(RuntimeException常用)*原创 2024-05-15 21:48:16 · 310 阅读 · 0 评论 -
3.2.编译时异常和运行时异常
点击红色波浪线处->alt+回车->选第一个结果:异常原因:parse方法底层有ParseException。编译时异常,在编译阶段,必须要手动处理,否则代码报错。->在于提醒程序员检查本地信息运行时异常,在编译阶段是不需要处理的,是代码运行时出现的异常。->代码出错而导致程序出现的问题详情在 B站Java下部(视频号BV1yW4y1Y7Ms)P53第5分钟左右。原创 2024-05-15 21:42:39 · 303 阅读 · 0 评论 -
3.3.异常在代码中的两个作用
这里有弊端,因为setAge这个方法并没有把结果告诉调用者,而是直接把结果打印在控制台。:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况。出错原因:Student是引用数据类型,初始值为null。其中只创建了数组对象,没创建数组元素对象。:异常是用来查询bug的关键参考信息。故为空值null,无法调用方法。正确代码如下:即用逗号分割即可。原创 2024-08-22 18:59:14 · 463 阅读 · 0 评论 -
3.4.异常处理的方式-JVM虚拟机默认处理异常的方式以及try...catch捕获异常
把异常的名称,异常的原因以及异常出现的位置等信息输出在了控制台。程序停止执行,下面的代码不会再执行了。例如:例如:改用try...catch:详解:此时会把try里面的所有代码全部执行完毕,不会执行catch里面的代码注:只有当出现了异常,才会执行catch里面的代码。例如:会写多个catch与之对应细节:如果我们要捕获多个异常,这些异常中如果存在父子关系的话,那么父类(Exception最大的异常)一定要写在最下面。**写上面会报错->原因如下:优化:扩展:相当于try...catch的代码白写了,最终还原创 2024-05-14 00:06:08 · 309 阅读 · 0 评论 -
3.5.异常中的常见方法
举例:原创 2024-05-13 23:57:21 · 211 阅读 · 0 评论 -
3.6.抛出处理
结果:结果:结果:原创 2024-05-14 00:11:46 · 251 阅读 · 0 评论 -
3.7.异常-案例
(如果一开始不知道如何用异常的语法写,可先用如if语句代替try...catch,最后再把if优化为try...catch)原创 2024-08-22 19:12:56 · 214 阅读 · 0 评论 -
3.8.自定义异常
一.自定义异常操作步骤:1.定义异常类:类名要见名知意。起名->异常的名字+Exception2.写继承关系:a.运行时异常,继承RuntimeException;b.编译时异常,继承Exception。3.写空参构造。4.写带参构造。自定义异常的目的(意义):就是为了让控制台的报错信息更加的见名知意。以上两个构造方法(应译为Constructor)可用快捷键alt+fn+ins可快速生成步骤"alt+fn+ins->构造方法->选择要加入的方法即可"二原创 2024-05-15 21:51:39 · 365 阅读 · 1 评论
分享