Explorar el Código

day15 和day16 和day17代码

fjl123 hace 9 meses
padre
commit
e9ac06b6a8
Se han modificado 27 ficheros con 1668 adiciones y 0 borrados
  1. 27 0
      src/main/java/com/sf/day15/_01_random/Test.java
  2. 51 0
      src/main/java/com/sf/day15/_02_uuid/Test.java
  3. 173 0
      src/main/java/com/sf/day15/_03_date/Test.java
  4. 127 0
      src/main/java/com/sf/day16/_01_arrayList/TestArrayList.java
  5. 62 0
      src/main/java/com/sf/day16/_01_arrayList/dt/Department.java
  6. 17 0
      src/main/java/com/sf/day16/_01_arrayList/dt/User.java
  7. 84 0
      src/main/java/com/sf/day16/_02_linkedList/TestLinkedlist.java
  8. 53 0
      src/main/java/com/sf/day16/_02_linkedList/dt/User.java
  9. 87 0
      src/main/java/com/sf/day16/_03_generics/Test.java
  10. 16 0
      src/main/java/com/sf/day16/_03_generics/dt/AnmailUtil.java
  11. 7 0
      src/main/java/com/sf/day16/_03_generics/dt/Cat.java
  12. 7 0
      src/main/java/com/sf/day16/_03_generics/dt/Dog.java
  13. 30 0
      src/main/java/com/sf/day16/_03_generics/dt/Poiint1.java
  14. 30 0
      src/main/java/com/sf/day16/_03_generics/dt/Point.java
  15. 30 0
      src/main/java/com/sf/day16/_03_generics/dt/Point2.java
  16. 37 0
      src/main/java/com/sf/day16/_03_generics/dt/Point4.java
  17. 97 0
      src/main/java/com/sf/day16/_04_iter/Test.java
  18. 93 0
      src/main/java/com/sf/day17/_01_set/Test.java
  19. 62 0
      src/main/java/com/sf/day17/_01_set/TestHashCode.java
  20. 146 0
      src/main/java/com/sf/day17/_01_set/TestTreeSet.java
  21. 64 0
      src/main/java/com/sf/day17/_01_set/dt/Employee.java
  22. 66 0
      src/main/java/com/sf/day17/_01_set/dt/Student.java
  23. 30 0
      src/main/java/com/sf/day17/_01_set/dt/User.java
  24. 178 0
      src/main/java/com/sf/day17/_02_map/TestHashMap.java
  25. 11 0
      src/main/java/com/sf/day17/_02_map/able/ILoginAble.java
  26. 24 0
      src/main/java/com/sf/day17/_02_map/able/impl/LoginAbleImpl.java
  27. 59 0
      src/main/java/com/sf/day17/_02_map/dt/Student.java

+ 27 - 0
src/main/java/com/sf/day15/_01_random/Test.java

@@ -0,0 +1,27 @@
+package com.sf.day15._01_random;
+
+import java.util.Random;
+
+/**
+ * create By  fjl
+ */
+public class Test {
+
+    public static void main(String[] args) {
+        // 使用Random 的api
+        // Random 类提供构造器 , 说明可以通过new 方式进行创建的
+        // 在jdk 当中有的时候存在同名的类 , Math 假设有两类
+        // 两个Math是在不同的包 , 上面import导入的是另外一个包下面类
+//        System.out.println(random.nextInt(1));
+
+
+        // 需求: 验证码 , 要求生成6位数字验证码的字符串 , 要求使用StringBuild 和Random 去实现
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < 6; i++) {
+            // 每一次for 循环都需要生成一个随机数
+            Random random1 = new Random();
+            sb.append(random1.nextInt(10));
+        }
+        System.out.println(sb);
+    }
+}

+ 51 - 0
src/main/java/com/sf/day15/_02_uuid/Test.java

@@ -0,0 +1,51 @@
+package com.sf.day15._02_uuid;
+
+import java.util.Random;
+import java.util.Scanner;
+import java.util.UUID;
+
+/**
+ * create By  fjl
+ */
+public class Test {
+
+    public static void main(String[] args) {
+        // 1 知道uuid 作用可以生成一位字符串
+        UUID uuid = UUID.randomUUID();
+        //默认打印的时候调用object的toStrinig方法  打印是地址值,说明他重写了object的toString方法
+        // 可以把uuid 转换成字符串 toString()m方法
+        String str = uuid.toString();
+        System.out.println(str);
+
+        // 需求: 生成6位验证码,要求截取uuid前6位作为验证码
+        String code = UUID.randomUUID().toString().substring(0, 6);
+        System.out.println(code);
+//
+        /**
+         * 需求: 登录功能
+         * 要求: 要求用户输入 验证码,账号,密码
+         * 如果验证码错误提醒验证码错误 ,验证码对比要求忽略大小写对比
+         * 如果账号为"admin" 密码为123
+         */
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入验证码:");
+        String inputCode = scanner.next();
+        System.out.println("请输入账号:");
+        String username = scanner.next();
+        System.out.println("请输入密码:");
+        String password = scanner.next();
+
+        // 判断输入验证码和生成验证码是否一致
+        if(!code.equalsIgnoreCase(inputCode)){
+            System.out.println("验证码输入错误");
+            return;
+        }
+        // 账号和密码对比
+        if("admin".equalsIgnoreCase(username) && "123".equalsIgnoreCase(password)){
+            System.out.println("登录成功");
+        }else{
+            System.out.println("登录失败");
+        }
+
+    }
+}

+ 173 - 0
src/main/java/com/sf/day15/_03_date/Test.java

@@ -0,0 +1,173 @@
+package com.sf.day15._03_date;
+
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Scanner;
+
+/**
+ * create By  fjl
+ */
+public class Test {
+    public static void main(String[] args) throws ParseException {
+//        method1();
+//        method2();
+//        method3();
+//        method4();
+//        method5();
+        method6();
+    }
+
+    private static void method6() throws ParseException {
+        /**
+         * 用户输入日期: 2024-07-22 10:30:20
+         * 用户输入加月 :1   输入加天: 7
+         * 最终输出格式 2024.08.29 10:30:20
+         */
+        //1 创建出来一个Scaner   str 格式
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入日期:");
+        String strDate = scanner.nextLine();
+        //2 创建对象 接受输入月 和天
+        System.out.println("请输入+月:");
+        int mouth = scanner.nextInt();
+        System.out.println("请输入+日:");
+        int day = scanner.nextInt();
+        //3 把str 日期格式转换成Date  SimpleDateFormate parse   date
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = sdf.parse(strDate);
+        //4 Calandar.getInstance();
+        Calendar instance = Calendar.getInstance();
+        //5 calendar.setTime(ddate);
+        instance.setTime(date);
+        //6 claendar.add()
+        instance.add(Calendar.MONTH,mouth);
+        instance.add(Calendar.DAY_OF_MONTH,day);
+        //7 clalendar.getTime   date
+        Date time = instance.getTime();
+        //8 SimpleDateFormat   sdf.format(date);
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
+        String str = sdf1.format(time);
+        System.out.println(str);
+
+
+    }
+
+    private static void method5() {
+        // 学习Calendar
+        // 1 如何获取Calendar
+        Calendar calendar = Calendar.getInstance();
+        // 2 学习他的api   set  add  get
+        // calender 对与日期进行运算操作 , 比如+  - 操作,你要操作哪一个日期对象告诉工具类
+        // setTime: 告诉工具类我们要操作哪一个日期对象
+        calendar.setTime(new Date());
+        // get 方法可以帮我们去获取年月日时分秒的信息 , 但是这里他月特殊: 是从0开始
+        System.out.println(calendar.get(Calendar.YEAR));
+        System.out.println(calendar.get(Calendar.HOUR));
+        System.out.println(calendar.get(Calendar.MONTH)+1);
+
+        //add 可以对于我们日期进行运算操作
+        // 要求讲 日增加一天
+        calendar.add(Calendar.DAY_OF_MONTH,1);
+        // getTime: 他可以把Calandar 内容转成date 对象
+        Date date = calendar.getTime();
+        System.out.println(date.toLocaleString());
+
+
+    }
+
+    private static void method4() throws ParseException {
+        /**
+         * 需求: 要求输入日期 2024-07-23  10:30:20
+         * 要求打印  2024.07.23  10:30:20
+         *
+         * 关键点就是日期的格式如何转换
+         * 1 scaner 输入内容是一个字符串
+         * 2 把字符串转成一个date    sdf.format(str)
+         * 3 创建一个新的simpleDateformat(yyyy.MM.dd HH:mm:ss)
+         */
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入日期:");
+        String d1 = scanner.nextLine();
+        // 把他转换成date
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = sdf.parse(d1);
+        //创建一个sdf
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy.MM.ss HH:mm:ss");
+        String str1 = sdf1.format(date);
+        System.out.println(str1);
+    }
+
+    private static void method3() throws ParseException {
+        // 要求在控制台输入两个日期 ,
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入第一个日期:");
+        // 先输入第一个日期,
+        // 在输入第二个日期
+        // 日期格式 年-月-日 时-分-秒,
+        String d1 = scanner.nextLine();
+        System.out.println("请输入第二个日期:");
+        String d2 = scanner.nextLine();
+        // 在控制台打印日期1 和日期2 比较关系
+        // 关键点日期的比较 可以使用时间戳进行比较 date.getTime();
+        // 问题: 如何获取到输入内容的时间戳 有: 字符串  要: date   simpledateFormat.parse(str)
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date1 = sdf.parse(d1);
+        Date date2 = sdf.parse(d2);
+//
+        if(date1.getTime()>date2.getTime()){
+            System.out.println("日期1 大于日期2");
+        }else{
+            System.out.println("日期 小于日期2");
+        }
+    }
+
+
+
+    private static void method2() throws ParseException {
+        //1 如何创建出来这个类
+        // 观察了SimpleDateFormat这个类有2个构造器, 我们是要用他有参构造器
+        /**
+         * 参数: 要们要打印的日期的格式
+         * y: 年
+         * M: 月
+         * d: 日
+         *
+         * H: 小时
+         * m: 分钟
+         * s: 秒
+         */
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
+        //2 学习这个类当中常用方法
+        /**
+         * format : String format(Date date)
+         * parse : Date parse(String source)
+         */
+        // 如何创建日期对象Date  new Date();
+        String str = sdf.format(new Date());
+        System.out.println(str);
+        // 获取毫秒值
+        // 把str 转换会日期对象
+        Date date = sdf.parse(str);
+        System.out.println(date);
+
+
+    }
+
+    private static void method1() {
+        // 要求创建出来一个Date 日期类
+        Date date = new Date();
+        System.out.println(date);
+        // 把日期转换成字符串 调用toString 方法
+        System.out.println(date.toString());
+        // 获取当前日期距离时间原点的毫秒值
+        // 时间戳的应用常见: web领取当中会用他来解决一些图片缓存问题
+        // 比如后面实现图形验证码功能: 在浏览器当中是有缓存功能, 第一次和第二次访问的结果是一样的浏览就不会去发送新的请求
+        System.out.println(date.getTime());
+        // 将我们日期格式转换成中国的格式
+        System.out.println(date.toLocaleString());
+        // 打印出来日期格式 20224.7.22 1:45.30  ,需求自定义打印出来日期的格式
+    }
+}

+ 127 - 0
src/main/java/com/sf/day16/_01_arrayList/TestArrayList.java

@@ -0,0 +1,127 @@
+package com.sf.day16._01_arrayList;
+
+import com.sf.day16._01_arrayList.dt.Department;
+import com.sf.day16._01_arrayList.dt.User;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ * create By  fjl
+ */
+public class TestArrayList {
+
+
+    public static void main(String[] args) {
+
+//        method1();
+//        method2();
+        /**
+         *  定义部门 id , name  ,sn
+         *  要求在部门当中定义静态代码块初始化部门:
+         *  要求创建3个部门对象new Department(1L,"test1","sn1") new Department(1L,"test2","sn2") ...
+         *  把这三个对象放到ArrayList当中
+         *
+         *  要求在测试的时候
+         *  method1():  输入删除的位置,删除对应的元素
+         *  method2();  判断name是否等于test1, 如果等于test1把name 修改成test1111
+         */
+//        method3();
+        method4();
+    }
+
+    private static void method4() {
+        //1 获取集合
+        ArrayList list = Department.list;
+        //2 遍历集合拿到每一个集合元素
+        for (int i = 0; i < list.size(); i++) {
+            Department department = (Department) list.get(i);
+            //3 判断集合当中元素Department 当中name 的值是否test1
+            if("test1".equals(department.getName())){
+                //4 如果值为test1 就把值修改成test1111
+                department.setName("test111");
+            }
+        }
+        System.out.println(list);
+    }
+
+    private static void method3() {
+        //1 第一个Scaner对象
+        Scanner scanner = new Scanner(System.in);
+        //2 接受删除位置
+        System.out.println("请输入删除位置从0开始:");
+        int index = scanner.nextInt();
+        //3 获取List集合
+        ArrayList list = Department.list;
+        //4 删除集合
+        list.remove(index);
+        System.out.println(list);
+    }
+
+    private static void method2() {
+        // 往ArrayList 当中添加4个User 对象
+        List list = new ArrayList();
+        list.add(new User("zhangsan",10));
+        list.add(new User("lisi",20));
+        list.add(new User("wangwu",30));
+        list.add(new User("zhaoliu",40));
+        System.out.println(list);
+    }
+
+    private static void method1() {
+        // 创建ArrayList
+        List list = new ArrayList();
+        /**
+         *  往arrayList 当中添加三个元素   11, 22 ,33 ,22 ,44
+         */
+        // add
+        list.add("123");
+        list.add(22);
+        list.add(33);
+        list.add(22);
+        list.add(44);
+        // 有记录添加顺序, 允许重复
+        System.out.println(list);
+        // 查询  调用是get 方法,传入的索引
+        /**
+         *  思考问题: 为什么List 内部元素类型是Object 而不是某一个类型
+         *  什么类型的数据都可以存
+         */
+        Object obj = list.get(0);
+        /**
+         * 获取数组当中的每一个元素
+         * 进行遍历
+         * size: list 集合的长度
+         */
+//        for (int i = 0; i < list.size(); i++) {
+//            System.out.println(list.get(i));
+//        }
+
+        /**
+         * 修改集合当中元素
+         * 需求: 把索引为2位置元素修改成555
+         * 返回值: 会把修改之前的内容返回
+         */
+        Object item = list.set(2, 555);
+//        System.out.println(item);
+//        for (int i = 0; i < list.size(); i++) {
+//            System.out.println(list.get(i));
+//        }
+
+        /**
+         * 删除结合当中元素
+         * 在删除的时候如果在调用remove的时候你传入是一个基本类型值int 他就回认为你这是一个索引
+         * 如果你要删除的元素内容就是一个int内容,我们应该是把他包装成一个Integer对象
+         */
+//        list.remove(0);
+        //list.remove(Object obj)
+        Integer it = Integer.valueOf(22);
+        list.remove(it);
+        for (int i = 0; i < list.size(); i++) {
+            System.out.println(list.get(i));
+        }
+
+        // 注意 : 集合他是不支持存基本类型的, 他支持对象
+    }
+}

+ 62 - 0
src/main/java/com/sf/day16/_01_arrayList/dt/Department.java

@@ -0,0 +1,62 @@
+package com.sf.day16._01_arrayList.dt;
+
+import java.util.ArrayList;
+
+/**
+ * create By  fjl
+ */
+public class Department {
+    private Long id;
+    private String name;
+    private String sn;
+    public static ArrayList list = new ArrayList();
+
+    static {
+
+        list.add(new Department(1L,"test1","sn1"));
+        list.add(new Department(2L,"test2","sn2"));
+        list.add(new Department(3L,"test3","sn3"));
+    }
+
+    @Override
+    public String toString() {
+        return "Department{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", sn='" + sn + '\'' +
+                '}';
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSn() {
+        return sn;
+    }
+
+    public void setSn(String sn) {
+        this.sn = sn;
+    }
+
+    public Department() {
+    }
+
+    public Department(Long id, String name, String sn) {
+        this.id = id;
+        this.name = name;
+        this.sn = sn;
+    }
+}

+ 17 - 0
src/main/java/com/sf/day16/_01_arrayList/dt/User.java

@@ -0,0 +1,17 @@
+package com.sf.day16._01_arrayList.dt;
+
+/**
+ * create By  fjl
+ */
+public class User {
+    private String name;
+    private Integer age;
+
+    public User() {
+    }
+
+    public User(String name, Integer age) {
+        this.name = name;
+        this.age = age;
+    }
+}

+ 84 - 0
src/main/java/com/sf/day16/_02_linkedList/TestLinkedlist.java

@@ -0,0 +1,84 @@
+package com.sf.day16._02_linkedList;
+
+
+import com.sf.day16._02_linkedList.dt.User;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ * create By  fjl
+ */
+public class TestLinkedlist {
+    public static void main(String[] args) {
+
+        method2();
+
+    }
+
+    private static void method1() {
+        //1 创建出来Linkedlist , 提供无参数构造器
+        LinkedList linkedList = new LinkedList();
+//        - void addFirst(Object e) 将指定元素插入此列表的开头 (头部入队)。
+        // addFrist 方法是LinkedList 他当中方法
+        linkedList.addFirst(123);
+        linkedList.addFirst(234);
+        linkedList.addFirst(456);
+        System.out.println(linkedList);
+//        - void addLast(Object e) 将指定元素添加到此列表的结尾 (尾部入队)。
+        linkedList.addLast(777);
+        System.out.println(linkedList);
+//        - Object getFirst() 返回此列表的第一个元素 (获取队列头部元素)。
+//        System.out.println(linkedList.getFirst());
+//        - Object getLast() 返回此列表的最后一个元素 (获取队列尾部元素)。
+//        System.out.println(linkedList.getLast());
+        Object o = linkedList.get(1);
+        System.out.println(o);
+//        - Object removeFirst()  移除并返回此列表的第一个元素 (头部出队)。
+        linkedList.removeFirst();
+//        - Object removeLast()  移除并返回此列表的最后一个元素 (尾部出队)。
+        linkedList.removeLast();
+        System.out.println(linkedList);
+    }
+
+
+    public static void method2(){
+        // 需求: 要求录入4个客户信息 ,客户有name,age,vip (boolean)
+        // 录入完以后 要把这些客户信息保存起来, 要求vip 要排在前面.
+        // 遍历集合信息,判断如果是vip 打印优先办理
+
+        //1 创建User  name  age  vip
+        //2 创建LinkedList 集合
+        LinkedList linkedList = new LinkedList();
+        //3 fori  遍历4 次
+        for (int i = 0; i < 4; i++) {
+            //4 创建Scaner 输入姓名, 年龄, vip
+            Scanner scanner = new Scanner(System.in);
+            System.out.println("请输入姓名:");
+            String name = scanner.next();
+            System.out.println("请输入年龄:");
+            Integer age = scanner.nextInt();
+            System.out.println("是否是vip输入true或者false:");
+            String flag = scanner.next();
+
+            boolean f = Boolean.parseBoolean(flag);
+            //把数据封装User对象当中
+            User user = new User(name,age,f);
+            //5 判断如果是vip addFirst 如果是addLast
+            if(f){
+                linkedList.addFirst(user);
+            }else{
+                linkedList.addLast(user);
+            }
+        }
+        //6 遍历linkedList 那集合当中元素判断如果是vip 就打印优先办理
+        for (int i = 0; i < linkedList.size(); i++) {
+            User user = (User) linkedList.get(i);
+            if(user.getVip()){
+                System.out.println("用户:"+user.getName() +"是vip客户优先办理业务");
+            }
+        }
+
+    }
+}

+ 53 - 0
src/main/java/com/sf/day16/_02_linkedList/dt/User.java

@@ -0,0 +1,53 @@
+package com.sf.day16._02_linkedList.dt;
+
+/**
+ * create By  fjl
+ */
+public class User {
+    private String name;
+    private Integer age;
+    private Boolean vip;
+
+
+    public User() {
+    }
+
+    public User(String name, Integer age, Boolean vip) {
+        this.name = name;
+        this.age = age;
+        this.vip = vip;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "name='" + name + '\'' +
+                ", age=" + age +
+                ", vip=" + vip +
+                '}';
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+
+    public Boolean getVip() {
+        return vip;
+    }
+
+    public void setVip(Boolean vip) {
+        this.vip = vip;
+    }
+}

+ 87 - 0
src/main/java/com/sf/day16/_03_generics/Test.java

@@ -0,0 +1,87 @@
+package com.sf.day16._03_generics;
+
+import com.sf.day16._03_generics.dt.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * create By  fjl
+ */
+public class Test {
+    public static void main(String[] args) {
+
+
+
+
+        method3();
+    }
+
+    private static void method2() {
+        //需求:定义一个类Point,x和y表示横纵坐标,类型可以String、也可以Integer、也可以Double表示坐标类型。
+        // 获取横纵坐标值
+
+        //没有泛型之前
+        //分别创建3个Point坐标, 使用3个不同数据类  Integer  Double String
+//        Point point = new Point(10,20);
+//        Integer x = point.getX();
+//
+//        Poiint1 poiint1 = new Poiint1("10", "30");
+//        String x1 = poiint1.getX();
+//
+//        Point2 point2 = new Point2(10.00, 20.00);
+//        Double x2 = point2.getX();
+
+        //我想要的效果只定义一个类,可以接受不同的类型
+        // 解决: 可以通过泛型解决问题
+//        Point4<Integer> point4 = new Point4<>(10,20);
+//        System.out.println(point4.getX());
+//
+//        Point4<String> p2 = new Point4<>("100","30");
+//        System.out.println(p2.getX());
+//
+//        Point4<Double> p3 = new Point4<>(20.00,30.00);
+//        System.out.println(p3.getX());
+        Point4.eat(123);
+        Point4.eat("你好");
+
+
+
+    }
+
+    public static void method3(){
+
+        /**
+         * 需求: 定义一个类 当中提供方法是静态方法 无返回值 eat 方法 ,
+         * 如果传入的是猫就打印猫吃饭 ,如果传入的是狗就打印狗吃饭  要求使用泛型是去做
+         */
+        AnmailUtil.eat(new Cat());
+    }
+
+    public static void method1(){
+        /**
+         * 在没有泛型之前
+         *  往ArrayList当中存储数据 在获取数据的时候要进行类型的强转
+         *
+         *  List他在设计的时候,考虑到list当中可能会存储各种各样类型元素,他就没有把类型写死而是用Object类型
+         *
+         *  但是有一些业务场景,我的集合就只存字符串, 我的集合当中就只存Integer
+         *  我们可不可以做到存的时候是字符串类型, 取的时候也是一个字符串的类型, 不需要我们进行强转的动作
+         *
+         *  解决:  使用泛型
+         *  List<泛型> list = new ArrayList<>();         *
+         *  泛型: 现在简单理解就是你集合当中元素的类型
+         *
+         */
+        List<String> list = new ArrayList<>();
+        list.add("123");
+        list.add("232");
+        list.add("223");
+        list.add("323");
+//        String obj = (String) list.get(0);
+        String str = list.get(0);
+        System.out.println(str);
+
+
+    }
+}

+ 16 - 0
src/main/java/com/sf/day16/_03_generics/dt/AnmailUtil.java

@@ -0,0 +1,16 @@
+package com.sf.day16._03_generics.dt;
+
+/**
+ * create By  fjl
+ */
+public class AnmailUtil<T> {
+
+    public static<T> void eat(T t){
+        // 如何判断他是猫的类型还是狗的类型呢?
+        if(t instanceof Dog){
+            System.out.println("狗吃饭");
+        }else if(t instanceof Cat){
+            System.out.println("猫吃饭");
+        }
+    }
+}

+ 7 - 0
src/main/java/com/sf/day16/_03_generics/dt/Cat.java

@@ -0,0 +1,7 @@
+package com.sf.day16._03_generics.dt;
+
+/**
+ * create By  fjl
+ */
+public class Cat {
+}

+ 7 - 0
src/main/java/com/sf/day16/_03_generics/dt/Dog.java

@@ -0,0 +1,7 @@
+package com.sf.day16._03_generics.dt;
+
+/**
+ * create By  fjl
+ */
+public class Dog {
+}

+ 30 - 0
src/main/java/com/sf/day16/_03_generics/dt/Poiint1.java

@@ -0,0 +1,30 @@
+package com.sf.day16._03_generics.dt;
+
+/**
+ * create By  fjl
+ */
+public class Poiint1 {
+    private String x;
+    private String y;
+
+    public Poiint1(String x, String y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    public String getX() {
+        return x;
+    }
+
+    public void setX(String x) {
+        this.x = x;
+    }
+
+    public String getY() {
+        return y;
+    }
+
+    public void setY(String y) {
+        this.y = y;
+    }
+}

+ 30 - 0
src/main/java/com/sf/day16/_03_generics/dt/Point.java

@@ -0,0 +1,30 @@
+package com.sf.day16._03_generics.dt;
+
+/**
+ * create By  fjl
+ */
+public class Point {
+    private Integer x;
+    private Integer y;
+
+    public Point(Integer x, Integer y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    public Integer getX() {
+        return x;
+    }
+
+    public void setX(Integer x) {
+        this.x = x;
+    }
+
+    public Integer getY() {
+        return y;
+    }
+
+    public void setY(Integer y) {
+        this.y = y;
+    }
+}

+ 30 - 0
src/main/java/com/sf/day16/_03_generics/dt/Point2.java

@@ -0,0 +1,30 @@
+package com.sf.day16._03_generics.dt;
+
+/**
+ * create By  fjl
+ */
+public class Point2 {
+    private Double x;
+    private Double y;
+
+    public Point2(Double x, Double y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    public Double getX() {
+        return x;
+    }
+
+    public void setX(Double x) {
+        this.x = x;
+    }
+
+    public Double getY() {
+        return y;
+    }
+
+    public void setY(Double y) {
+        this.y = y;
+    }
+}

+ 37 - 0
src/main/java/com/sf/day16/_03_generics/dt/Point4.java

@@ -0,0 +1,37 @@
+package com.sf.day16._03_generics.dt;
+
+/**
+ * create By  fjl
+ * 反省可以修饰类 ,也可以修饰字段 , 也可以修饰方法
+ */
+public class Point4<T> {
+
+    private T x;
+    private T y;
+
+
+    public Point4(T x, T y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    public T getX() {
+        return x;
+    }
+
+    public void setX(T x) {
+        this.x = x;
+    }
+
+    public T getY() {
+        return y;
+    }
+
+    public void setY(T y) {
+        this.y = y;
+    }
+
+    public static<T> void eat(T t){
+        System.out.println(t);
+    }
+}

+ 97 - 0
src/main/java/com/sf/day16/_04_iter/Test.java

@@ -0,0 +1,97 @@
+package com.sf.day16._04_iter;
+
+import java.util.*;
+
+
+/**
+ * create By  fjl
+ */
+public class Test {
+
+    public static void main(String[] args) {
+//        method3();
+        method5();
+
+    }
+
+    private static void method5() {
+        /**
+         * 需求: 有一个集合,要求在控制台当中输入集合中元素一共有4个
+         * 遍历集合元素,如果元素是西游记就删除西游记, 要求用迭代器或者是foreach
+         */
+        List<String> list = new ArrayList<>();
+
+        Scanner scanner = new Scanner(System.in);
+        for (int i = 0; i < 4; i++) {
+            System.out.println("请输入四大名著:");
+            String item = scanner.next();
+            list.add(item);
+        }
+//        System.out.println(list);
+        // 使用迭代器或者是forEach 进行迭代
+//        for (String str:list) {
+//            if("西游记".equals(str)){
+//                list.remove("西游记");
+//            }
+//        }
+        // 解决要使用迭代器自带删除方法
+        Iterator<String> iterator = list.iterator();
+        while (iterator.hasNext()){
+            String item = iterator.next();
+            if("西游记".equals(item)){
+                iterator.remove();
+            }
+        }
+        System.out.println(list);
+    }
+
+    private static void method4() {
+        // jdk8 提供新特性 lambda表达式
+        List<String> list = Arrays.asList("西游记", "红楼梦", "水浒传", "三国演义");
+        list.forEach(ele-> System.out.println(ele));
+    }
+
+    private static void method3() {
+        // 提供简单方式去创建List
+        // Arrays.asList():
+        // ... 可变数组,可以传递多个参数
+        List<String> list = Arrays.asList("西游记", "红楼梦", "水浒传", "三国演义");
+        for (String ele:list) {
+            System.out.println(ele);
+        }
+    }
+
+
+    private static void method2() {
+
+        //1 如何获取迭代器对象 , 在集合当中是有 list.itertion():
+        List<String> list = new ArrayList<>();
+        list.add("西游记");
+        list.add("红楼梦");
+        list.add("水浒传");
+        list.add("三国演义");
+        Iterator<String> iterator = list.iterator();
+
+        System.out.println(iterator.hasNext());
+        // 如何拿到结合当中所有的元素呢?
+        // 还是使用for循环吗?  不是我们使用的是while
+        while (iterator.hasNext()){
+            System.out.println(iterator.next());
+        }
+    }
+
+    private static void method1() {
+        // 先往List 集合当中添加4个元素
+        List<String> list = new ArrayList<>();
+        list.add("西游记");
+        list.add("红楼梦");
+        list.add("水浒传");
+        list.add("三国演义");
+
+        // 遍历list集合
+        for (int i = 0; i < list.size(); i++) {
+            System.out.println(list.get(i));
+        }
+
+    }
+}

+ 93 - 0
src/main/java/com/sf/day17/_01_set/Test.java

@@ -0,0 +1,93 @@
+package com.sf.day17._01_set;
+
+import java.util.*;
+
+/**
+ * create By  fjl
+ */
+public class Test {
+
+    public static void main(String[] args) {
+       method3();
+
+    }
+
+    private static void method() {
+        // 1 创建出来一个HashSet
+        HashSet<String> set = new HashSet<>();
+        // 往set集合添加元素
+        set.add("123");
+        set.add("sdss123");
+        set.add("222");
+        set.add("ccccc");
+        set.add("456");
+        // set集合当中不允许元素重复
+        set.add("123");
+        set.add("222");
+        set.add("asdf");
+        set.add("666");
+        // 遍历
+        for (String s : set) {
+            System.out.println(s);
+        }
+
+        //删除元素 remove();
+        // remove 删除单个元素 clear 是清空全部元素
+//        set.remove("123");
+        // 判断集合当中是否包含ccccc
+        System.out.println(set.contains("ccccc"));
+
+        set.clear();
+        System.out.println(set);
+
+        // 获取set集合当中元素, 这边没有办法想list那样直接调用get方法进行获取
+    }
+
+    public static void method1(){
+        // 需求: 往集合当中添加四大名著 ,判断如果等于西游记就把西游记删除掉 使用set集合操作
+        Set<String> set =new HashSet<>();
+        set.add("西游记");
+        set.add("红楼梦");
+        set.add("水浒传");
+        set.add("三国演义");
+
+        for (String s : set) {
+            if(s.equals("西游记")){
+                set.remove("西游记");
+            }
+        }
+        System.out.println(set);
+    }
+
+    public static void method2(){
+        // 需求2: 现在有一个List集合  集合重复 有若干个元素  张三  李四  王五  张三  李四  赵六  王八....
+        // 要求: 计算出来一共有多少个名字.
+        List<String> list = Arrays.asList("张三", "李四", "王五", "张三", "李四", "赵六", "王八");
+        Set<String> set = new HashSet<>();
+        for (String s : list) {
+            set.add(s);
+        }
+        System.out.println("一共有多少个名字:"+set.size());
+    }
+
+    public static void method3(){
+        // 需求3: 在控制台输入字符串 "sttarbssce" ,  要求输出不重复的字母  starbsce  不要求顺序
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入内容:");
+        String str = scanner.next();
+
+        Set<Character> set = new HashSet<>();
+        // 帮助我们把字符串变成字符数组
+        char[] chars = str.toCharArray();
+        for (int i = 0; i < chars.length; i++) {
+            set.add(chars[i]);
+        }
+
+        // 遍历set集合
+        StringBuilder sb = new StringBuilder();
+        for (Character character : set) {
+            sb.append(character);
+        }
+        System.out.println(sb.toString());
+    }
+}

+ 62 - 0
src/main/java/com/sf/day17/_01_set/TestHashCode.java

@@ -0,0 +1,62 @@
+package com.sf.day17._01_set;
+
+import com.sf.day17._01_set.dt.User;
+
+import java.util.HashSet;
+import java.util.Set;
+
+
+/**
+ * create By  fjl
+ */
+public class TestHashCode {
+
+    public static void main(String[] args) {
+
+
+
+        method1();
+    }
+
+    private static void method1() {
+        // 需求: 创建出来4个User("will","10") User("fjl","20") User("wangwu","10) User("fjl",20);
+        // 把这4 个 User全部放到Set集合当中
+        User user = new User("will",10);
+        User user1 = new User("fjl",20);
+        User user2 = new User("wangwu",10);
+        User user3 = new User("fjl",20);
+
+        System.out.println(user1.hashCode());
+        System.out.println(user3.hashCode());
+
+
+        Set<User> set = new HashSet<>();
+        set.add(user);
+        set.add(user1);
+        set.add(user2);
+        set.add(user3);
+        System.out.println(set);
+
+        // 我希望user3 不存进去 , 但是他存进去了
+        // 为什么存进去: 因为现在hashcode 是根据地址值进行计算的,都是不同就回存进去
+        // 如果你想不存进去,我们要覆盖Object当中hashcode 方法和equals方法
+    }
+
+    // hashcode说明
+    private static void method() {
+        // 计算对象hashcode值
+
+        /**
+         * hashcode: 这个方法是Object当中提供方法,
+         * 他会根据对象地址及通过运算计算出来一个int值
+         * 这个int 值我们也叫做hash值
+         */
+        // 结论: 同一个对象多次hashcode 值是相同
+        User user = new User("will",10);
+        System.out.println("hashcode值:" + user.hashCode());
+        System.out.println("hashcode值:" + user.hashCode());
+        //      不同对象调用hashcode 值是不同
+        User user1 = new User("will",10);
+        System.out.println("hashCode值:"+ user1.hashCode());
+    }
+}

+ 146 - 0
src/main/java/com/sf/day17/_01_set/TestTreeSet.java

@@ -0,0 +1,146 @@
+package com.sf.day17._01_set;
+
+import com.sf.day17._01_set.dt.Employee;
+import com.sf.day17._01_set.dt.Student;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.TreeSet;
+
+/**
+ * create By  fjl
+ */
+public class TestTreeSet {
+
+    public static void main(String[] args) {
+//        method2();
+
+
+//        method3();
+        method4();
+    }
+
+    private static void method4() {
+        // 按照年龄进行排序
+        // Compareable 和comparetor 接口区别
+        /**
+         *  相同点: 两个都可以去进行比较操作
+         *  区别: 主要就是应用场景区别
+         *  如果没有特殊要求的话, 使用他们两个都可以
+         *  比如我们要对于一些第三方框架类进行排序操作, 这些类没有实现Comparable接口那此时我们稚嫩个
+         *  使用和comparetor
+         */
+        TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
+            @Override
+            public int compare(Student o1, Student o2) {
+                if (o1.getName().length() > o2.getName().length()) {
+                    return 1;
+                } else if (o1.getName().length() < o2.getName().length()) {
+                    return -1;
+                } else {
+                    return 0;
+                }
+            }
+        });
+
+        treeSet.add(new Student("zhangsan", 18));
+        treeSet.add(new Student("lisi", 10));
+        treeSet.add(new Student("wangwu", 30));
+        System.out.println(treeSet);
+
+    }
+
+
+    private static void method3() {
+        /**
+         * 需求: 现在有4用户(name,age,intergral) , 100,300,200,50
+         * 要求打印积分高的前两个 姓名和积分
+         */
+        TreeSet<Employee> treeSet = new TreeSet<>();
+        treeSet.add(new Employee("zhangsan", 10, 100));
+        treeSet.add(new Employee("lisi", 20, 300));
+        treeSet.add(new Employee("wangwu", 30, 200));
+        treeSet.add(new Employee("zhaoliu", 10, 50));
+        System.out.println(treeSet);
+
+
+        // 存到arrayList中
+        ArrayList<Employee> arrayList = new ArrayList<>();
+        for (Employee employee : treeSet) {
+            arrayList.add(employee);
+        }
+        // 打印前两个积分最高的
+        for (int i = 0; i < 2; i++) {
+            System.out.println(arrayList.get(i));
+        }
+    }
+
+    private static void method2() {
+        // 需求: 往Treeset 去添加3个Student对象, 这个Student有name 有age , 我希望按照age进行排序
+        TreeSet<Student> treeSet = new TreeSet();
+        treeSet.add(new Student("zhangsan", 18));
+        treeSet.add(new Student("lisi", 10));
+        treeSet.add(new Student("wangwu", 30));
+
+        System.out.println(treeSet);
+
+        /**
+         * 为什么之前在比较Integer类型字符串类型 long  他可以直接帮助我们比较
+         * 那是因为这些类型都已经实现了Comparable
+         *
+         * 在treeset内部默认使用的就是compareable 当中有个compare方法 进行比较
+         * 我们都知道treeset底层是用红黑树, 在添加节点的时候要进行比较动作才能进行添加,这个比较就是调用compare方法
+         *
+         * 也就说我们添加到treeset当中元素, 必须要实现comparable接口, 他才能够进行比较
+         * 我们现在集合元素是Student 有实现Compareable接口 ? 没有实现.  没有实现无法进行比较
+         *
+         *  想要解决: 实现comparable接口 ,他有一个比较方法
+         *  public interface Comparable<T> {
+         * 	   public int compareTo(T o);
+         * }
+         * - this  <    o:返回负整数  -1,存储在左边
+         * - this  ==  o: 返回		     0,此时认为两个对象内容相同,元素不能加入集合中。
+         * - this  >    o:返回正整数   1,存储在右边
+         *
+         */
+
+    }
+
+    private static void method1() {
+        // Treeset 常用api
+//        add(E e):添加元素到集合中。如果该元素已经存在,则不会添加。
+//        contains(Object o):如果集合包含指定的元素,则返回 true。
+//        remove(Object o):从集合中移除指定的元素,如果存在的话。
+//        clear():移除此集合中的所有元素。
+//        size():返回集合中的元素数量。
+        // 1 创建treeset
+        // 底层数据结构采用是红黑树
+        /**
+         * treeset 特点: 1 排序   2 去重
+         * hashset 特点: 1 无序   2 去重
+         *
+         * 如果对排序没有要求:  使用hashSet 因为他底层使用的是hash表, 查数据速度比较快
+         * 如果对排序有要求: 使用treeset
+         *
+         */
+        TreeSet<Integer> treeSet = new TreeSet<>();
+        treeSet.add(4);
+        treeSet.add(2);
+        treeSet.add(1);
+        treeSet.add(5);
+        System.out.println(treeSet);
+
+        // 判断treeset 当中是否包含元素
+        boolean contains = treeSet.contains(4);
+        System.out.println(contains);
+        // 删除treeset 当中元素
+        treeSet.remove(4);
+        System.out.println(treeSet);
+        System.out.println(treeSet.size());
+        treeSet.clear();
+        System.out.println(treeSet);
+    }
+
+
+}

+ 64 - 0
src/main/java/com/sf/day17/_01_set/dt/Employee.java

@@ -0,0 +1,64 @@
+package com.sf.day17._01_set.dt;
+
+/**
+ * create By  fjl
+ */
+public class Employee implements Comparable<Employee> {
+    private String name;
+    private Integer age;
+    private Integer intergral;
+
+
+    @Override
+    public String toString() {
+        return "Employee{" +
+                "name='" + name + '\'' +
+                ", age=" + age +
+                ", intergral=" + intergral +
+                '}';
+    }
+
+    public Employee() {
+    }
+
+    public Employee(String name, Integer age, Integer intergral) {
+        this.name = name;
+        this.age = age;
+        this.intergral = intergral;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+
+    public Integer getIntergral() {
+        return intergral;
+    }
+
+    public void setIntergral(Integer intergral) {
+        this.intergral = intergral;
+    }
+
+    @Override
+    public int compareTo(Employee o) {
+        if(o.intergral> this.getIntergral()){
+            return 1;
+        }else if(o.intergral < this.getIntergral()){
+            return -1;
+        }else{
+            return 0;
+        }
+    }
+}

+ 66 - 0
src/main/java/com/sf/day17/_01_set/dt/Student.java

@@ -0,0 +1,66 @@
+package com.sf.day17._01_set.dt;
+
+/**
+ * create By  fjl
+ */
+
+/**
+ * Compareable<泛型>
+ *
+ * 泛型: 就是节点元素的类型
+ * 我现在要按照年龄进行排序, 也就以为我的树当中存储 年龄数据
+ */
+public class Student{
+    private String name;
+    private Integer age;
+
+    @Override
+    public String toString() {
+        return "Student{" +
+                "name='" + name + '\'' +
+                ", age=" + age +
+                '}';
+    }
+
+    public Student() {
+    }
+
+    public Student(String name, Integer age) {
+        this.name = name;
+        this.age = age;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+
+    /**
+     *  返回值3中
+     *  负数 : 放左边
+     *  正数: 放右边
+     *  0 : 不添加
+     */
+    // 比较的方法
+//    @Override
+//    public int compareTo(Student o) {
+//        if(this.name.length() > o.name.length()){
+//            return 1;
+//        }else if(this.name.length() < o.name.length()){
+//            return -1;
+//        }else{
+//            return 0;
+//        }
+//    }
+}

+ 30 - 0
src/main/java/com/sf/day17/_01_set/dt/User.java

@@ -0,0 +1,30 @@
+package com.sf.day17._01_set.dt;
+
+import java.util.Objects;
+
+/**
+ * create By  fjl
+ */
+public class User {
+    private String name;
+    private Integer age;
+
+    public User(String name, Integer age) {
+        this.name = name;
+        this.age = age;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        User user = (User) o;
+        return Objects.equals(name, user.name) &&
+                Objects.equals(age, user.age);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(name, age);
+    }
+}

+ 178 - 0
src/main/java/com/sf/day17/_02_map/TestHashMap.java

@@ -0,0 +1,178 @@
+package com.sf.day17._02_map;
+
+import com.sf.day17._02_map.able.ILoginAble;
+import com.sf.day17._02_map.able.impl.LoginAbleImpl;
+import com.sf.day17._02_map.dt.Student;
+import sun.nio.ch.sctp.SctpNet;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+
+/**
+ * create By  fjl
+ */
+public class TestHashMap {
+
+    public static void main(String[] args) {
+//        method1();
+
+//        method2();
+
+//        method3();
+
+//        method4();
+        method5();
+
+
+
+    }
+
+    private static void method5() {
+        /**
+         * 检查用户名是否存在
+         * 要求用户在控制台当中输入用户名, 如果在map 当中student 中已经存在了,就打印用户名已存在
+         */
+        //1 创建出来一个Scanner对象
+        Scanner scanner = new Scanner(System.in);
+        //2 调用next方法 获取输入内容
+        System.out.println("请输入用户名:");
+        String username = scanner.next();
+//        map.put(1L,new Student(1L,"zhangsan",10));
+//        map.put(2L,new Student(2L,"lisi",10));
+//        map.put(3L,new Student(3L,"wangwu",10));
+        //3 获取map的所有value Collection
+        Collection<Student> values = Student.map.values();
+        //4 遍历获取的value 集合
+        for(Student s: values){
+            //5 判断输入name 和集合当中Student.getName 是否相当如果相当就打印已存在
+            if(username.equals(s.getName())){
+                System.out.println("用户名已经存在");
+            }
+        }
+
+
+    }
+
+    private static void method4() {
+        // 要求在控制台当中输入id , 输入几就删除几好student
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入要删除的学生编号:");
+        long l = scanner.nextLong();
+        // 把用户输入id 传入到map 当中删除map 元素
+        Student.map.remove(l);
+
+        System.out.println(Student.map);
+    }
+
+    /**
+     * 2 在控制当中输入账号 和密码
+     *  要求把账号和密码封装map  key=username  key1=password
+     *  要求面向接口编程login(Map<String,Object> map)
+     *   在接口实现类中完成登录判断账号如果等于admin密码等于123表示登录成功
+     */
+    private static void method3() {
+        //1 创建出来Scaner对象
+        //2 在控制台当中输入账号和密码
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入账号:");
+        String username = scanner.next();
+        System.out.println("请输入密码");
+        String password = scanner.next();
+        //3 把控制台当中输入账号和密码存到Map<String,String>  username=admin  pasword="123"
+        Map<String,String> map = new HashMap<>();
+        map.put("username",username);
+        map.put("password",password);
+        //4 创建出来一个接口ILoginAble, 在接口当中提供login(Map<String,String> map);
+        //5 创建一个接口的实现类, 在这个实现类当中我们要实现登录.
+           //5.1 上map当中获取username 和获取password ,和admin 和 123进行比较
+        ILoginAble able = new LoginAbleImpl();
+        able.login(map);
+    }
+
+    /**
+     *  1 统计一个字符串中每个字符出现次数
+     *  {s=2,t=3,a=4}
+     *
+     *  2 在控制当中输入账号 和密码
+     *   要求把账号和密码封装map  key=username  key1=password
+     *   要求面向接口编程login(Map<String,Object> map)
+     *   在接口实现类中完成登录判断账号如果等于admin密码等于123表示登录成功
+     *
+     *  3 在静态代码块中初始化一个Map<Strinig,Student> student(id,name,age)
+     *    Student(1L,"zhangsan","sn1")
+     *    Student(2L,"lisi","sn2")
+     *    Student(3L,"wangwu","sn3")
+     *
+     *     用户在控制台当中输入要删除学生的id , 输入几就删除几号学生
+     *
+     *  4 检查用户名是否存在, 在控制中输入用户名,判断用户名是否存在,
+     *  判断的依据那3中静态代码块中的map
+     */
+    private static void method2() {
+        // 1 创建出来一个Scaner 对象
+        Scanner scanner = new Scanner(System.in);
+        // 2 调用.nect方法获取字符串
+        System.out.println("请输入内容:");
+        String str = scanner.next();
+        // 3 需要把字符串转换成字符数组
+        char[] chars = str.toCharArray();
+        // 4 创建HashMap 去统计次数
+        HashMap<Character,Integer> map = new HashMap<>();
+        // 5 遍历字符数组
+        for(char c : chars){
+            Integer count = map.get(c);
+            //   5.1 判断如果在map当中不存在key , 保存这个key值为1
+            if(!map.containsKey(c)){
+                map.put(c,1);
+            }else{
+                //   5.2     在map如果存在,让数量+1
+                map.put(c,count+1);
+            }
+        }
+        System.out.println(map);
+
+    }
+
+    /**
+     * 学习hashMap 常用api
+     */
+    private static void method1() {
+        //  HashMap 提供了无参数构造器 所以我们可以直接new HashMap()
+        HashMap<String, Object> map = new HashMap<>();
+        // 增删改查api
+        // put(key,value);
+        // 需求: 往map 当中存两个数据  name = zhangsan   age =  10
+        map.put("name", "zhangsan");
+        map.put("age", 10);
+        System.out.println(map);
+        // 删除map当中元素api
+        // map.remove(key)
+        // 需求: 把key 为name 的元素删除掉
+        map.remove("name");
+        System.out.println(map);
+
+        // 修改: map是没有提供特定修改的方法的, 可以使用put 方法进行修改,如果key 相同就回吧value值给覆盖掉
+        map.put("age", 20);
+        System.out.println(map);
+        // 查寻操作:
+        // size 查看map当中大小
+        System.out.println(map.size());
+
+        // isEmpty()  判断map内容视为空
+        System.out.println(map.isEmpty());
+
+        // get(key) 根据key 去map当中获取value 值
+        System.out.println(map.get("age"));
+
+        // containsKey: 判断map当中是否存在这个key  containsValue: 判断map当中是否存在这个value
+        System.out.println(map.containsKey("name"));
+        System.out.println(map.containsValue(20));
+        // keyset: 获取map当中所有的key      values: 获取map当中所有的value
+        // 往map当中在存 name=wangwu
+        map.put("name","wangwu");
+        System.out.println("map当中所有key:" + map.keySet());
+        System.out.println("map当中所有的value:"+ map.values());
+    }
+}

+ 11 - 0
src/main/java/com/sf/day17/_02_map/able/ILoginAble.java

@@ -0,0 +1,11 @@
+package com.sf.day17._02_map.able;
+
+import java.util.Map;
+
+/**
+ * create By  fjl
+ */
+public interface ILoginAble {
+
+    void login(Map<String,String> map);
+}

+ 24 - 0
src/main/java/com/sf/day17/_02_map/able/impl/LoginAbleImpl.java

@@ -0,0 +1,24 @@
+package com.sf.day17._02_map.able.impl;
+
+import com.sf.day17._02_map.able.ILoginAble;
+
+import java.util.Map;
+
+/**
+ * create By  fjl
+ */
+public class LoginAbleImpl implements ILoginAble {
+
+    @Override
+    public void login(Map<String, String> map) {
+        // 从map 当中要获取username 和password
+        String username = map.get("username");
+        String password = map.get("password");
+        // 拿map当中username 和password   admin 123进行比较
+        if("admin".equals(username)&& "123".equals(password)){
+            System.out.println("登录成功");
+        }else{
+            System.out.println("登录失败");
+        }
+    }
+}

+ 59 - 0
src/main/java/com/sf/day17/_02_map/dt/Student.java

@@ -0,0 +1,59 @@
+package com.sf.day17._02_map.dt;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * create By  fjl
+ */
+public class Student {
+    private Long id;
+    private String name;
+    private Integer age;
+    public static Map<Long,Student> map = new HashMap<>();
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+
+    @Override
+    public String toString() {
+        return "Student{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", age=" + age +
+                '}';
+    }
+
+    static {
+        map.put(1L,new Student(1L,"zhangsan",10));
+        map.put(2L,new Student(2L,"lisi",10));
+        map.put(3L,new Student(3L,"wangwu",10));
+    }
+
+    public Student(Long id, String name, Integer age) {
+        this.id = id;
+        this.name = name;
+        this.age = age;
+    }
+}