JavaSE(下)

一、集合进阶

双列集合Map<>【Java】Map集合概述

双列集合特点

Map常见API

三种遍历方式

1、由键找值,创建键的集合
2、通过键值对对对象进行遍历

3、利用lambda表达式进行遍历

HashMap

HashMap的特点
HashMap的底层
总结

例题

package com.itheima.Mapdemo;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

package com.itheima.Mapdemo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMap_demo1 {
    public static void main(String[] args) {
        HashMap<Student,String> hm=new HashMap<>();

        Student s1=new Student("zhangsan",23);
        Student s2=new Student("lisi",24);
        Student s3=new Student("wangwu",25);

        hm.put(s1,"shanxi");
        hm.put(s2,"guangdong");
        hm.put(s3,"anhui");

        Set<Student> keys=hm.keySet();
        for (Student key : keys) {
            String value=hm.get(key);
            System.out.println(key+"="+value);
        }

        System.out.println("---------------");

        Set<Map.Entry<Student, String>> entries = hm.entrySet();
        for (Map.Entry<Student, String> entry : entries) {
            /*Student key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"="+value);*/
            System.out.println(entry);
        }

        System.out.println("---------------");

        hm.forEach((student,s)-> {
            System.out.println(student+"="+s);
            }
        );
    }
}


package com.itheima.Mapdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import java.util.Set;

public class HashMap_demo2 {
    public static void main(String[] args) {
        String[] arr={"A","B","C","D"};
        ArrayList<String> list=new ArrayList<>();
        Random r=new Random();
        for (int i = 0; i < 80; i++) {
            int index=r.nextInt(arr.length);
            list.add(arr[index]);
        }
        HashMap<String,Integer> hm=new HashMap<>();
        for (String s : list) {
            if(hm.containsKey(s)){
                int num = hm.get(s);
                num++;
                hm.put(s,num);
            }
            else {
                hm.put(s, 1);
            }
        }
        String s=arr[0];
        int max=hm.get(s);
        Set<String> keys=hm.keySet();
        for (String key : keys) {
            int value = hm.get(key);
            if(value>max) {
                s = key;
            }
        }
        System.out.println(s);
    }
}

LinkedHashMap

TreeMap

升序
降序
例题


package com.itheima.Mapdemo.TreeMapdemo;

public class Student implements Comparable<Student>{
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }

    @Override
    public int compareTo(Student o) {
        int i=this.getAge()-o.getAge();
        i=i==0?this.getName().compareTo(o.getName()):i;
        return i;
    }
}
总结

可变参数

总结

集合工具类connections


package com.itheima.a07mycollections;

import java.util.ArrayList;
import java.util.Collections;

public class CollectionsDemo1 {
    public static void main(String[] args) {
      /*
        public static <T> boolean addAll(Collection<T> c, T... elements)        批量添加元素
        public static void shuffle(List<?> list)                                打乱List集合元素的顺序
     */



        //addAll  批量添加元素
        //1.创建集合对象
        ArrayList<String> list = new ArrayList<>();
        //2.批量添加元素
        Collections.addAll(list,"abc","bcd","qwer","df","asdf","zxcv","1234","qwer");
        //3.打印集合
        System.out.println(list);

        //shuffle 打乱
        Collections.shuffle(list);

        System.out.println(list);

    }
}

package com.itheima.a07mycollections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class CollectionsDemo2 {
    public static void main(String[] args) {
      /*
        public static <T> void sort(List<T> list)                       排序
        public static <T> void sort(List<T> list, Comparator<T> c)      根据指定的规则进行排序
        public static <T> int binarySearch (List<T> list,  T key)       以二分查找法查找元素
        public static <T> void copy(List<T> dest, List<T> src)          拷贝集合中的元素
        public static <T> int fill (List<T> list,  T obj)               使用指定的元素填充集合
        public static <T> void max/min(Collection<T> coll)              根据默认的自然排序获取最大/小值
        public static <T> void swap(List<?> list, int i, int j)         交换集合中指定位置的元素
     */


        System.out.println("-------------sort默认规则--------------------------");
        //默认规则,需要重写Comparable接口compareTo方法。Integer已经实现,按照从小打大的顺序排列
        //如果是自定义对象,需要自己指定规则
        ArrayList<Integer> list1 = new ArrayList<>();
        Collections.addAll(list1, 10, 1, 2, 4, 8, 5, 9, 6, 7, 3);
        Collections.sort(list1);
        System.out.println(list1);


        System.out.println("-------------sort自己指定规则规则--------------------------");
        Collections.sort(list1, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println(list1);

        Collections.sort(list1, (o1, o2) -> o2 - o1);
        System.out.println(list1);

        System.out.println("-------------binarySearch--------------------------");
        //需要元素有序
        ArrayList<Integer> list2 = new ArrayList<>();
        Collections.addAll(list2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        System.out.println(Collections.binarySearch(list2, 9));
        System.out.println(Collections.binarySearch(list2, 1));
        System.out.println(Collections.binarySearch(list2, 20));

        System.out.println("-------------copy--------------------------");
        //把list3中的元素拷贝到list4中
        //会覆盖原来的元素
        //注意点:如果list3的长度 > list4的长度,方法会报错
        ArrayList<Integer> list3 = new ArrayList<>();
        ArrayList<Integer> list4 = new ArrayList<>();
        Collections.addAll(list3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Collections.addAll(list4, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
        Collections.copy(list4, list3);
        System.out.println(list3);
        System.out.println(list4);

        System.out.println("-------------fill--------------------------");
        //把集合中现有的所有数据,都修改为指定数据
        ArrayList<Integer> list5 = new ArrayList<>();
        Collections.addAll(list5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Collections.fill(list5, 100);
        System.out.println(list5);

        System.out.println("-------------max/min--------------------------");
        //求最大值或者最小值
        ArrayList<Integer> list6 = new ArrayList<>();
        Collections.addAll(list6, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        System.out.println(Collections.max(list6));
        System.out.println(Collections.min(list6));

        System.out.println("-------------max/min指定规则--------------------------");
        // String中默认是按照字母的abcdefg顺序进行排列的
        // 现在我要求最长的字符串
        // 默认的规则无法满足,可以自己指定规则
        // 求指定规则的最大值或者最小值
        ArrayList<String> list7 = new ArrayList<>();
        Collections.addAll(list7, "a","aa","aaa","aaaa");
        System.out.println(Collections.max(list7, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        }));

        System.out.println("-------------swap--------------------------");
        ArrayList<Integer> list8 = new ArrayList<>();
        Collections.addAll(list8, 1, 2, 3);
        Collections.swap(list8,0,2);
        System.out.println(list8);



    }
}

综合例题

随机点名


import java.util.ArrayList;
import java.util.Collections;

public class Test1 {
    public static void main(String[] args) {
       /* 班级里有N个学生,学生属性:姓名,年龄,性别。
        实现随机点名器。*/


        //1.定义集合
        ArrayList<String> list = new ArrayList<>();
        //2.添加数据
        Collections.addAll(list,"范闲","范建","范统","杜子腾","杜琦燕","宋合泛","侯笼藤","朱益群","朱穆朗玛峰","袁明媛");
        //3.随机点名
       /* Random r = new Random();
        int index = r.nextInt(list.size());
        String name = list.get(index);
        System.out.println(name);*/

        //打乱
        Collections.shuffle(list);

        String name = list.get(0);
        System.out.println(name);


    }
}

不可变集合

二、Stream流

Stream流的使用步骤

第一步-得到Stream流

单列集合
双列集合

数组
一堆零散的数据
注意

第二步-Stream流的中间方法

方法举例

简化后

第三步-Stream流的终结方法

 Lambda表达式

 小结        

 三、方法引用

 

 

 引用静态方法

引用成员方法

 

 

 引用构造方法

 

 类名引用成员方法

引用数组的构造方法 

 小结

 四、异常

 

编译异常和运行异常 

 

异常的作用   

 异常的处理方式

JVM默认的处理方式 

自己处理(捕获异常) 

  

 

灵魂四问 

异常的常用方法 

  

 抛出处理

小结 

练习 

 

 

 自定义异常

 

 五、File

构造方法 

 

 小结

 成员方法

判断、获取 

 

 

创建、删除 

 

获取并遍历 

 

 

六、IO流

 概述

 

 字节输出流(FileOutputStream)

 

  

 

 

 小结

 字节输入流(FileInputStream)

 

字节输入流循环读取 

 

 

 文件拷贝(小文件)

文件拷贝 (大文件)

 

 

        

 文件拷贝(改写)

 

 IO流中捕获异常的方式

 

自动释放异常 

 

 

字符集

计算机存储规则(英文GBK)

 计算机存储规则(汉字GBK)

 

 

计算机存储规则(英文)(Unicode) 

 

 计算机存储规则(中文)(Unicode)

 

产生乱码的原因 

 

 编码和解码的方法

 

 

字符输入流 

 

 

空参read方法 
 有参read方法

 字符输出流

 

 字符流原理解析

 

 

字节流和字符流不同适用场景 

 练习

 缓冲流        

字节缓冲流 

 

 

 

字符缓冲流 

 转换流

 

 

   序列化流/反序列化流

 

 

 

 打印流

 

 

字节打印流 

 

 

 

字符打印流 

 

 

 

 小结

 

 解压缩流/压缩流

 

解压缩流 

 

压缩流 

 单个文件

文件夹 

 

 

 常用工具包(Commons-io)

 

 

 

 

 ​​​​​​​

 

Hutool工具包 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值