Map集合/Exception类/File类

一.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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java中的IO流和Map集合来实现将文件中的字符读取到Map集合中计算出现的字符。具体步骤如下: 1. 创建一个File对象,指定要读取的文件路径。 2. 创建一个FileReader对象,用于读取文件中的字符。 3. 创建一个HashMap<Character, Integer>对象,用于存储每个字符出现的次数。 4. 使用while循环读取文件中的每一个字符,并将其存储到Map集合中。 5. 如果字符在Map集合中不存在,则将该字符作为键,出现次数初始化为1作为值,存储到Map集合中。 6. 如果字符在Map集合中已经存在,则将该字符对应的值加1。 7. 最后遍历Map集合,输出每个字符出现的次数。 代码如下: ```java import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.HashMap; import java.util.Map; public class CountCharacters { public static void main(String[] args) throws Exception { File file = new File("test.txt"); // 创建File对象 FileReader reader = new FileReader(file); // 创建FileReader对象 Map<Character, Integer> map = new HashMap<>(); // 创建HashMap对象 int ch; while ((ch = reader.read()) != -1) { // 读取文件中的每一个字符 char c = (char) ch; if (map.containsKey(c)) { // 如果字符在Map集合中已经存在 int count = map.get(c); map.put(c, count + 1); // 将该字符对应的值加1 } else { // 如果字符在Map集合中不存在 map.put(c, 1); // 将该字符作为键,出现次数初始化为1作为值,存储到Map集合中 } } reader.close(); // 关闭读取器 for (Map.Entry<Character, Integer> entry : map.entrySet()) { // 遍历Map集合 System.out.println(entry.getKey() + "出现了" + entry.getValue() + "次"); // 输出每个字符出现的次数 } } } ``` 注意:上述代码只能统计ASCII码表中的字符出现次数,如果要统计Unicode字符出现次数,需要使用Unicode编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值