| |
|
|
开发:
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年12日历 | -2025/12/4 1:56:38- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |