Map集合/Exception类/File类

本文详细介绍了Java中Map集合的特性和操作方法,包括添加、删除、判断、获取等功能,并探讨了HashMap、TreeMap及LinkedHashMap的特点。此外,还介绍了Collections工具类的使用方法,以及异常处理机制和File类的操作方法。最后,对Java IO流进行了概述,包括流的分类和基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Map集合

概述

1.哈希表元素的唯一性是通过元素重写hashcode()和equals()方法来保证的
注意:若元素为自定义类型,必须重写这两个方法
2.map集合是双链集合,map集合的数据结构只和键有关
一:添加功能

 V put(K key, V value) 
         // 将指定的值与此映射中的指定键关联(可选操作)。 
  如果键不存在,添加值,返回null
  如果键存在,替换键所对应的值,返回被替换的值

二:删除功能

 void clear() 
          //从此映射中移除所有映射关系(可选操作)。 

 V remove(Object key) 
          //如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
          返回值:返回此映射中以前关联该键的值,如果此映射不包含该键的映射关系,则返回 null

三:判断功能

 boolean containsKey(Object key) 
          //如果此映射包含指定键的映射关系,则返回 true。 
 boolean containsValue(Object value) 
         // 如果此映射将一个或多个键映射到指定值,则返回 true。
 boolean isEmpty() 
         // 如果此映射未包含键-值映射关系,则返回 true。  

四:获取功能

 Set<K> keySet() 
         // 返回此映射中包含的键的 Set 视图。 
 Set<Map.Entry<K,V>> entrySet() 
          //返回此映射中包含的映射关系的 Set 视图。
 Set<Map.Entry<K,V>> entrySet() 
          返回此映射中包含的映射关系的 Set 视图。  
 V get(Object key) 
         // 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 
  int size() 
          返回此映射中的键-值映射关系数。 

五.Map集合的遍历

1.Set<Map.Entry<K,V>> entrySet() 
        //  返回此映射所包含的映射关系的 Set 视图。
       // 然后使用 getkey()和getvalue()两个方法找对应的键和值
2. Set<K> keySet() 
       //   返回此映射中所包含的键的 Set 视图。 
       //然后通过 V get(Object key)该方法通过key(键)找到对应的值

1.HashMap
基于哈希表的 Map 接口的实现。并允许使用 null 值和 null 键。元素唯一,但是无序,元素唯一靠元素重写hashcode()和equals()方法来报证

2.TreeMap
底层数据结构是红黑树,元素唯一,而且还能对元素进行排序(自然排序,比较器排序)
排序的元素必须实现comparable接口的comapreTo()方法(一般采用匿名内部类的方式)
3.LinkedHashMap
底层的数据结构有哈希表和链表保证 元素有序且唯一

二.collections

针对集合操作的工具类

此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。

常用方法
static void reverse(List<?> list) 
          //反转指定列表中元素的顺序。 
static void shuffle(List<?> list) 
         // 使用默认随机源对指定列表进行置换。 

三.异常类(throwable)

1.Exception
子类(1)编译时期异常只要不是RunTimeException都属于编译时期异常
例 如:IOException(IO流中的),ParseException(解析异常)
(2)运行时期异常(RuntimeException)
例如:NullPointerException:空指针异常!
处理方式

(1)try{...}catch{...}
//标准格式:
try{....
}catch{....
}finally{...
}//finally一定会执行,除非jvm退出
变形:
                    try...catch
                    try...catch...catch
                    try...finally...(多线程的时候:Lock锁)
针对多个异常
方法一:
分别进行try...catch
方法二:
try...catch...catch             
(2)throws
在方法声明上抛出异常,由于,编译时期异常,调用者必须要处理
注意:实际开发中尽量不要在main()方法上抛出异常
throw和throws的区别
throws抛出异常,在方法上抛出后面可以跟多个异常(类名)中间用逗号隔开,表示异常的一种可能性
throw抛出异常,在方法中抛出后面跟异常对象(匿名),表示异常的必然性

自定义异常类

自定义一个类,继承自Exception或者继承自RuntimeException
public class MyException extends Exception {

    public MyException(){

    }

    public MyException(String message){
        super(message) ;
    }

}

2.error
一般为较为严重的问题,此处不做讨论
3.final.finalize.finally
final终态的最终的
修饰成员变量,改变量不能被修改
修饰成员方法,该方法不能被重写
修饰类,该类不能被继承
finalize
它表示通过gc垃圾回收器回收不用的对象或者是变量,System.gc():实质,调用的是重写了Object类中finalize()方法,表示回收没有跟多引用对象或者变量等等…
finally
不能单独使用和try…catch…finally中一块使用,(异常,IO,数据库中中使用的),是用来释放资源
finally中的代码一定会执行,并且除非Java虚拟机Jvm退出了,才不会执行!

四.File类

1.构造方法

public File(String pathname)
//给定路径名以字符串来表示当前这个文件或者文件夹(开发中推荐使用第一种构造方法)
public File(String parent,String child)
//根据 parent 路径名字符串和 child 路径名字符串创建一个新 File对象 
public File(File parent, String child)
//根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例

2.常用方法
文件创建

public boolean mkdir()创建此抽象路径名指定的目录(文件夹)。
                如果当前某个盘符下已经有了这个目录(文件夹),不会在创建了.
public boolean createNewFile()throws IOException:创建文件的,如果已经有这个文件了,不在创建,并且该方法本身就会编译时期异常IOException 
 public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(创建文件夹,文件夹不存在,才开始创建)

重命名

public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。 
当两个文件的路径名一样是只是重命名
当两个文件的路径不一样时,有剪贴功能

判断功能

public boolean isDirectory():
//判断是否是文件夹                                      经常用到
public boolean isFile():
//判断是否是一个标准文件                                   经常用到
public boolean canRead():判断是否可读
public boolean canWriter():判断是否可写
public boolean isHidden():判断是否是隐藏文件
public boolean isAbsolute():判断次路径名是否是绝对路径

获取功能

File类中的获取功能:
public File getAbsolutePath():获取当前文件或者文件夹绝对路径
public String getPath():获取相对路径
public long length()返回由此抽象路径名表示的文件的长度
public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间
public String getName():获取名称

删除功能

    public boolean delete()删除此抽象路径名表示的文件或目录

高级获取功能

File类的高就获取功能:
    public String[] list():返回对象是一个字符串数组,当前哪个一盘符下的所有的文件以及文件夹的字符串名称数组
    public File[] listFiles():返回对象是一个File数组,当前哪个盘下的所有的文件以及文件夹的File数组

文件名称过滤器

 引出:文件名称过滤器         -------Javaweb中将过滤器以及上传和下载.
 public String[] list(FilenameFilter filter)
 public File[] listFiles(FileFilter filter)

参数是一个接口,(开发中使用的接口的匿名内部类的方式)
        实现一个方法:
            boolean accept(File dir, String name):这个方法的返回值是true(就是表示要将当前文件夹或者文件的名称添加数组中),false(表示不添加数组中)

五.IO流

概括

设备(硬盘)与设备(内存)之间的数据传输
按流的方向分:
输入流:读数据
输出流:写数据
按数据类型分:
字节流:
                字节输入流:InputStream
            字节输出流:OutputStream
            字符流
                字符输入流:Reader
                字符输出流:Writer

写数据的方法

针对输出流中写数据的方法:
        public abstract void write(int b):将指定的字节写入到输出流中
        public void write(byte[] b):将指定的字节数组写入到输出流中
        public void write(byte[] b, int off,int len):将字节数组的一部分写入到输出流中

换行

需要写入换行符号,每一个系统他们对应IO这块换行符号是不一样的
        对于windows操作系统来说:换行符号:\r\n
        对于Linux操操作系统来说:\n
        对于Mac操作系统来说:\r
<think>我们正在处理关于Java异常处理和集合的问题。根据用户要求,我们需要结合引用内容进行回答,并确保回答结构清晰、真实可靠。同时,我们需要生成相关问题。 首先,整理引用中关于异常处理的信息: - 引用[1]:自定义异常通过继承Exception或RuntimeException实现,用于分和处理错误,提高程序健壮性。 - 引用[2]:异常分为检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)。检查型异常必须在代码中处理,如IOException;非检查型异常通常是程序逻辑错误,如NullPointerException。 - 引用[3]:提到了UnsupportedOperationException,当试图修改只读集合时会抛出。 - 引用[4]:详细说明了异常的捕获与处理(try-catch)、throw和throws的使用,以及自定义异常的例子。 关于集合: - 引用[3]和[4]提到了集合框架,特别是Collections中的unmodifiableCollection方法创建只读集合。 - 引用[5]提到了HashMap的工作原理、集合特点以及异常处理机制。 根据以上信息,我们组织回答如下: ### Java异常处理 Java异常处理机制允许程序在出现错误时进行捕获和处理,保证程序健壮性。 #### 异常分 1. **检查型异常(Checked Exception)**:编译器要求必须处理的异常,通常发生在程序外部,如文件不存在(`IOException`)、数据库连接失败(`SQLException`)。处理方式有两种: - 使用`try-catch`块捕获并处理。 - 使用`throws`声明抛出,交由调用者处理。 2. **非检查型异常(Unchecked Exception)**:编译器不强制处理,通常是程序逻辑错误,如空指针(`NullPointerException`)、数组越界(`ArrayIndexOutOfBoundsException`)。这些异常继承自`RuntimeException`。 #### 异常处理机制 - **捕获异常**:使用`try-catch-finally`结构。 ```java try { // 可能抛出异常的代码 } catch (IOException e) { // 处理IOException } catch (Exception e) { // 处理其他异常 } finally { // 无论是否发生异常都会执行的代码(常用于释放资源) } ``` - **抛出异常**: - `throw`:在方法内部手动抛出一个异常对象。 - `throws`:在方法声明中指定可能抛出的异常型。 ```java public void readFile() throws IOException { if (fileNotExist) { throw new IOException("文件不存在"); } } ``` #### 自定义异常 通过继承`Exception`(检查型异常)或`RuntimeException`(非检查型异常)创建自定义异常。 ```java public class MyException extends Exception { public MyException(String message) { super(message); } } ``` ### Java集合 Java集合框架(Java Collections Framework)位于`java.util`包中,提供了一套性能优良、使用方便的接口和。 #### 常用集合 1. **List(有序、可重复)**: - `ArrayList`:基于动态数组,随机访问快,增删慢。 - `LinkedList`:基于双向链表,增删快,随机访问慢。 - `Vector`:线程安全的动态数组(已过时,通常用`ArrayList`替代)。 2. **Set(无序、不可重复)**: - `HashSet`:基于哈希表,无序。 - `LinkedHashSet`:维护插入顺序。 - `TreeSet`:基于红黑树,元素有序(自然顺序或定制排序)。 3. **Map(键值对)**: - `HashMap`:基于哈希表,允许`null`键/值,非线程安全。 - `LinkedHashMap`:维护插入顺序或访问顺序。 - `TreeMap`:基于红黑树,键有序。 - `Hashtable`:线程安全,不允许`null`键/值(已过时,通常用`ConcurrentHashMap`替代)。 #### 集合工具:`Collections` 提供静态方法操作集合,如: - `sort(List)`:排序。 - `reverse(List)`:反转。 - `unmodifiableCollection(Collection)`:创建只读集合,修改会抛出`UnsupportedOperationException`[^3]。 ### 示例代码 自定义异常与集合使用: ```java import java.util.*; public class Demo { public static void main(String[] args) { try { List<String> list = Collections.unmodifiableList(Arrays.asList("A", "B")); list.add("C"); // 抛出UnsupportedOperationException } catch (UnsupportedOperationException e) { throw new CustomException("只读集合不可修改", e); // 自定义异常 } } } class CustomException extends RuntimeException { public CustomException(String message, Throwable cause) { super(message, cause); } } ``` §§相关问题§§ 1. 检查型异常和非检查型异常在实际开发中应如何选择? 2. 如何正确使用`HashMap`?它的工作原理是什么? 3. 在Java中如何实现线程安全的集合? 4. `ArrayList`和`LinkedList`在性能上有哪些差异?如何选择?</think>### Java异常处理 Java异常处理机制用于管理程序运行时出现的错误,确保程序健壮性。主要分为两异常: 1. **检查型异常(Checked Exception)** 编译器强制要求处理的异常,通常由外部因素引起(如文件不存在)。必须使用`try-catch`捕获或`throws`声明抛出。 示例:`IOException`, `SQLException` ```java try { Files.readString(Path.of("file.txt")); } catch (IOException e) { // 必须捕获 System.out.println("文件读取失败"); } ``` 2. **非检查型异常(Unchecked Exception)** 通常由程序逻辑错误引起,不强制处理。继承自`RuntimeException`。 示例:`NullPointerException`, `ArrayIndexOutOfBoundsException` ```java String s = null; System.out.println(s.length()); // 抛出NullPointerException ``` #### 异常处理关键机制: - **`try-catch-finally`**:基础捕获结构,`finally`确保资源释放 - **`throw`**:主动抛出异常对象 - **`throws`**:方法声明可能抛出的异常 - **自定义异常**:继承`Exception`或`RuntimeException` ```java class MyException extends Exception { public MyException(String message) { super(message); } } ``` > **重要特性**:当抛出异常时,后续代码立即终止,程序沿调用栈向上寻找匹配的`catch`块。若未找到,线程终止并打印堆栈跟踪[^4]。 --- ### Java集合框架 Java集合框架在`java.util`包中,核心接口和实现: #### 1. **List(有序可重复)** | 实现 | 特点 | |----------------|-------------------------------| | `ArrayList` | 动态数组,随机访问快($O(1)$) | | `LinkedList` | 双向链表,插入删除快($O(1)$) | | `Vector` | 线程安全的动态数组(已过时) | ```java List<String> list = new ArrayList<>(); list.add("A"); // 添加元素 String elem = list.get(0); // 随机访问 ``` #### 2. **Set(无序唯一)** | 实现 | 特点 | |----------------|-------------------------------| | `HashSet` | 哈希表实现,最快查询($O(1)$) | | `TreeSet` | 红黑树实现,自动排序($O(\log n)$) | | `LinkedHashSet`| 保持插入顺序 | ```java Set<Integer> set = new HashSet<>(); set.add(1); set.add(1); // 重复元素被忽略 ``` #### 3. **Map(键值对)** | 实现 | 特点 | |----------------|-------------------------------| | `HashMap` | 哈希表实现,允许null键/值 | | `TreeMap` | 键自动排序 | | `Hashtable` | 线程安全(已过时) | ```java Map<String, Integer> map = new HashMap<>(); map.put("age", 25); // 插入键值对 int age = map.get("age"); // 取值 ``` #### 4. 工具 `Collections` - 创建只读集合: ```java List<String> unmodifiable = Collections.unmodifiableList(list); unmodifiable.add("B"); // 抛出UnsupportedOperationException[^3] ``` - 排序/查找: ```java Collections.sort(list); // 自然排序 ``` > **HashMap原理**:基于哈希表+链表/红黑树。当冲突桶元素>8时,链表转为红黑树(查询$O(\log n)$)[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值