| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Java基础复习巩固 -> 正文阅读 |
|
[数据结构与算法]Java基础复习巩固 |
第八天: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小时学习时间,当然你可以根据自己的自身情况安排。最后一句话:天道酬勤,相信你的付出终会有回报。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/10 2:41:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |