JavaSE基础复习巩固
第八天:Map集合(接口) 异常类(Exception)
Map:双列集合最顶层,它是以键值对的方式存储数据的。
Map<k,v> k:key(键) v:value(值) key:value
key(键):是唯一的, 一个键只能对应一个值,但是一个值可以对应多个键
value:是可以重复的。
添加数据用put(Object key,Object value)
注意:1.当映射的某条数据的key在集合中已存在时,会把原先的value覆盖掉,并且返回的是被覆盖的value。
2.当映射的某条数据的key在集合中已不存在时,这条数据可以直接添加到集合中,并且返回null。
HashMap(底层:数据加链表+哈希表+红黑树)
1.1 Map接口概述
我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同。
A:Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储
B:Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
C:Collection中的集合称为单列集合,Map中的集合称为双列集合。
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
1.1.1 hashMap的使用(常用方法)
A:添加功能:
V put(K key, V value) :以键=值的方式存入Map集合
B:获取功能:
V get(Object key):根据键获取值
int size():返回Map中键值对的个数
C:判断功能:
boolean containsKey(Object key):判断Map集合中是否包含键为key的键值对
boolean containsValue(Object value):判断Map集合中是否包含值为value键值对
boolean isEmpty():判断Map集合中是否没有任何键值对
D:删除功能:
void clear():清空Map集合中所有的键值对
V remove(Object key):根据键值删除Map中键值对
例子:
package com.swlz.map; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo2 { public static void main(String[] args) { /* A:添加功能: V put(K key, V value) :以键=值的方式存入Map集合 B:获取功能: V get(Object key):根据键获取值 int size():返回Map中键值对的个数 C:判断功能: boolean containsKey(Object key):判断Map集合中是否包含键为key的键值对 boolean containsValue(Object value):判断Map集合中是否包含值为value键值对 boolean isEmpty():判断Map集合中是否没有任何键值对 D:删除功能: void clear():清空Map集合中所有的键值对 V remove(Object key):根据键值删除Map中键值对 E:遍历功能: Set<Map.Entry<K,V>> entrySet():将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回*/ //创建集合 Map<String,String> map=new HashMap<>(); map.put("001","詹三"); map.put("002","李似"); map.put("003","王无"); // V get(Object key):根据键获取值 System.out.println(map.get("001")); // int size():返回Map中键值对的个数 System.out.println(map.size()); /* C:判断功能: boolean containsKey(Object key):判断Map集合中是否包含键为key的键值对*/ System.out.println(map.containsKey("002"));//true // boolean containsValue(Object value):判断Map集合中是否包含值为value键值对 System.out.println(map.containsValue("张三"));//false // boolean isEmpty():判断Map集合中是否没有任何键值对 System.out.println(map.isEmpty());//false /* D:删除功能: void clear():清空Map集合中所有的键值对*/ // map.clear(); // System.out.println(map); // V remove(Object key):根据键值删除Map中键值对 System.out.println(map.remove("003")); /* E:遍历功能: Set<Map.Entry<K,V>> entrySet():将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回*/ // Set<Map.Entry<String, String>> entries = map.entrySet(); } }
1.2 map集合的遍历(重点)
第一种方式用keySet
例子:
package com.swlz.map; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo3 { public static void main(String[] args) { Map<String,String> map=new HashMap<>(); map.put("001","张三"); map.put("002","李四"); map.put("003","王五"); //遍历Map集合 第一种方式keyset Set<String> keys = map.keySet();//得到map集合中所有的key // 然后在去遍历所有的key,通过key得到对应的value值 for (String key : keys) {//得到map集合中所有的key String value = map.get(key);//通过map集合中的key得到对应的value值 System.out.println("key"+key+":"+"value:"+value); } } }
第二种方式entrySet
例子:
package com.swlz.map; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo4 { public static void main(String[] args) { Map<String,String> map=new HashMap<>(); map.put("001","张三"); map.put("002","李四"); map.put("003","王五"); //遍历Map集合 第二种方式entrySet() map.entrySet() //获取所有的键值对entrys 里面有相应的getkey和getvalue方法 Map的内部类Entry 相当于一个类 里面封装了getkey和getvalue方法 Set<Map.Entry<String, String>> entrys = map.entrySet();//通过getkey和getvalue方法,得到对象的key和value //遍历所有的键值对,拿到键和值 for (Map.Entry<String, String> entry : entrys) { System.out.println("键:"+entry.getKey()+" "+"值:"+entry.getValue());//通过getkey和getvalue方法,得到对象的key和value } } }
1.3Map集合存储自定义类数据
例子:
package com.swlz.map; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo5 { public static void main(String[] args) { //创建HashMap集合 自定义对象作为key的时候 考虑去重 重写自定义类中的Object的hashcode和equals方法即可。 HashMap<Student, String> map = new HashMap<>(); Student s1 = new Student("张三", 19); Student s2 = new Student("李四", 18); Student s3 = new Student("王五", 28); Student s4 = new Student("赵六", 20); Student s5 = new Student("钱七", 22); map.put(s1,"001"); map.put(s2,"002"); map.put(s3,"003"); map.put(s4,"004"); map.put(s5,"005"); Set<Map.Entry<Student, String>> entries = map.entrySet(); for (Map.Entry<Student, String> entry : entries) { System.out.println(entry.getKey()+" "+entry.getValue()); } } }
集合总结,如图:

遍历:
for(元素的类型 变量 : 集合或者数组对象) {
可以直接使用变量;
}
这个list,set都可以使用
它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。
2.异常(Exception)类
异常:平时敲代码的时候出现的bug
2.1异常:Exception处理的第一种方式
jvm处理----很不友好,很暴力
直接把Exception的相关信息(异常的类型,异常的原因 异常的位置)打印出来
异常后面的代码是执行不了的。
例子:
int i=10/0; int[] arr=new int[2]; System.out.println(arr[5]); System.out.println("后面的代码继续执行");
2.2异常:Exception处理的第二种方式
捕捉处理---先捕捉到异常,再去处理异常
因为有时候,我们的代码并不一定会存在异常
格式:
try{
//有可能出现异常的代码-----尝试捕捉异常
}catch(异常的类型 e){
//处理异常的相关操作
}
注意: 在try块中,如果存在异常,那么异常后面的代码也不能执行,会直接跳到catch块中
例子:
package com.bianyiit.exception; import java.text.SimpleDateFormat; public class ExceptionDemo4 { public static void main(String[] args) { //第二种方式 try{ System.out.println(1); int a=0; int i=10/a; System.out.println(2); }catch (ArithmeticException e){ //处理异常 System.out.println(3); System.out.println("出现数学异常了....."); } System.out.println(4); } }
2.3异常处理的第三种方式:抛异常
编译时期(可以存在异常的代码)----把异常抛出来------抛到方法声明上面 ------谁调用此方法谁就处理这个异常
异常三个常用的方法:
String getMessage() 返回此 throwable 的详细消息字符串
String toString() 返回此 throwable 的简短描述
void printStackTrace() 打印异常的堆栈的跟踪信息
例子:
package com.bianyiit.exception; import java.text.ParseException; import java.text.SimpleDateFormat; public class ExceptionDemo6 { public static void main(String[] args) throws Exception { /*异常处理的第三种方式:抛异常 * 编译时期(可以存在异常的代码)----把异常抛出来------抛到方法声明上面 ------谁调用此方法谁就处理这个异常 * * */ /* SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd"); //字符串 String s = "2020:08--12"; sdf.parse(s);//throws ParseException*/ /* method1();*/ People p1 = new People(); p1.method2(); } public static void method1() throws Exception{ int a=0; int i=10/a; } }
除了以上我们还可以自定义异常:类
2.4finally:用来释放资源
用法:
try{
}catch(异常类型 e){
处理异常的操作;
}finally{
一定要执行的操作;比如:释放连接资源
}
目的,就是连接资源创建之后,不管有没有发生异常,连接资源必须释放
除了挂掉虚拟机,fnally块中的内容一定会执行
finally一定要结合try...catch使用吗?不一定,还可以try{}finally{}
今日学习感受:其实java基础前面还是很简单,首先你要学会用,把java该掌握的核心技术,要做到熟练使用,然后在去深入研究,打好基础很重要,希望自己不忘初心,继续坚持,当然也要劳逸结合,一天24小时,我们可以这样按8小时睡觉,8小时自由安排时间,8小时学习时间,当然你可以根据自己的自身情况安排。最后一句话:天道酬勤,相信你的付出终会有回报。
浙公网安备 33010602011771号