JAVA006【Map】

1.Map集合

  1. 为什么需要MAP集合

    解决单列集合查询数据不方便的问题

  2. MAP概述

    Map是一个接口 只要实现该接口的类都是 双列集合

    在存储数据需要存储两个:一个数据是键 一个是值

    这两个数据称为 键值对数据

    Map集合是用来存储键值对数据的

    特点:键必须是唯一的 值可以重复

    ArrayList list

    Map<String,String> list

    map.put(“001”,“张三”)

    map.put(“002”,“张三”)

  3. MAP接口常用子类

    HashMap LinkedHashMap

2.Map集合常用方法

package com.itheima._02Map常用方法;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
    目标:掌握Map集合常用的方法

    讲解:
        1. 演示Map集合常用方法
             public V put(K key, V value) :
                添加键值对数据
                如果键存在,使用新值替换旧值,返回旧值
                如果键不存在,直接存储

             public V get(Object key):
                根据键获得值
                如果键不存在,则返回null

             public V remove(Object key) :
                根据键删除键值对数据,返回键对应的值

             public boolean containKey(Object key) :
                判断是否包含指定的键,包含返回true,否则false

             public int size():获得键值对对数

             public void clear():清空集合

    小结:
        1. 添加和修改元素的方法?
            put

        2. 删除元素的方法?
            remove

        3. 获取元素的方法?
            get
 */
public class Demo01 {
    public static void main(String[] args) {
        // 创建Map集合
        Map<String,String> map = new HashMap<>();
        // 添加元素
        System.out.println(map.put("001", "张三")); // null
        System.out.println(map.put("001", "赵六")); // 张三

        map.put("002", "李四");
        map.put("003", "王五");

        System.out.println("------------------");
        // 根据键获得值
        System.out.println(map.get("004"));
        // 根据键删除数据
        System.out.println(map.remove("003")); // 王五
        System.out.println("------------------");

        // 判断是否包含指定的键
        System.out.println(map.containsKey("001")); // true
        // 获得键值对数据
        System.out.println(map.size()); // 2
        // 清空集合
        map.clear();
        System.out.println(map);
    }
}

3.键找值

不能直接使用增强for 和迭代器遍历

Set keySet() 获取键集合

调用ks方法:获取键集合对象

增强for迭代器遍历:获取每一个键

调用Map集合的get方法:获取值

package com.itheima._03Map遍历1_键找值方式;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

/**
    目标:掌握使用"键找值"的方式遍历Map集合

    讲解:
        1. Map集合的遍历方式介绍
            不能直接使用增强for和迭代器遍历

        2. 通过键找值遍历相关的方法
            * Set<K> keySet() 获得键集合

    小结:
        1. 键找值方式遍历Map集合的步骤
            * 调用Map集合的keySet方法:获得键集合对象
            * 使用增强for或迭代器遍历键集合:获得每一个键
            * 调用Map集合的get方法:根据键获得值
 */
public class Demo03 {
    public static void main(String[] args) {
        // 创建Map集合
        HashMap<String, String> map = new HashMap<>();
        // 添加数据
        map.put("001", "张三");
        map.put("002", "李四");
        map.put("003", "王五");

        // 获得键集合
        Set<String> keySet = map.keySet();
        // 使用迭代器遍历键集合
        Iterator<String> it = keySet.iterator();
        // 遍历键集合
        while(it.hasNext()){
            // 获得键
            String key = it.next();
            // 根据键获得值
            String value = map.get(key);
            System.out.println(key+"="+value);
        }
        System.out.println("-----------");
        // 使用增强for遍历键集合
        for (String key : keySet) {
            System.out.println(key+"="+map.get(key));
        }
    }
}

4.键值对方法

  1. Entry概述

    Entry对象又称为键值对对象

    用来封装键值对数据

  2. 如果获取Entry

    Set<Map.Entry<K,V>> entrySet() 获取Entry对象集合

  3. Entry 对象常用方法

    获取值getKey ()

    获取值getValue()

    小结:通过Entry 对象遍历

    package com.itheima._04Map遍历2_键值对方式;
    
    import com.itheima._12自定义Comparator比较器.Student;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    /**
        目标:能够使用"键值对"的方式遍历Map集合
    
        小结:
            通过Entry对象遍历Map集合的步骤
                1. 调用Map集合的entrySet方法:获得Entry对象集合
                2. 使用迭代器或增强for遍历集合:获得每一个Entry对象
                3. 调用Entry对象的方法获得键和值
                    K getKey() 获得键
                    V getValue() 获得值
     */
    public class Demo042 {
        public static void main(String[] args) {
            // 创建Map集合对象
            HashMap<String, String> map = new HashMap<>();
            // 存储键值对数据
            map.put("name", "孙悟空");
            map.put("gender", "男");
            map.put("age", "500");
    
            // 1. 获得Entry对象集合
            Set<Entry<String, String>> entrySet = map.entrySet();
            // 2. 使用迭代器遍历集合
            Iterator<Entry<String, String>> it = entrySet.iterator();
            while (it.hasNext()){
                // 获得Entry对象
                Entry<String, String> entry = it.next();
                // 3. 调用Entry对象的方法获得键和值
                System.out.println(entry.getKey()+"=" + entry.getValue());
            }
            System.out.println("-------------------");
            // 使用增强for遍历
            for(Entry<String, String> entry:entrySet){
                // System.out.println(entry.getKey()+"=" + entry.getValue());
                System.out.println(entry);
            }
        }
    }
    

5.HashMap

package com.itheima._05HashMap存储自定义类型;

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

/**
    目标:使用HashMap存储自定义对象:自定义对象作为键使用

    需求说明:
        每位学生(姓名,年龄)都有自己的家庭住址。那么既然有对应关系,
    则将学生对象和家庭住址存储到map集合中。学生作为键,家庭住址作为值。
    注意,学生姓名相同并且年龄相同视为同一名学生。

    步骤分析:
        1. 定义学生类封装姓名和年龄
        2. 创建Map集合存储学生:键:Student,值:String
        3. 添加多个学生到Map集合中
        4. 遍历输出Map集合学生数据

    小结:
        使用自定义对象作为键时如何实现去重功能?
            自定义类重写hashCode和equals方法
            如果自定义对象不是作为键,则不用重写这两个方法。
 */
public class Demo05 {
    public static void main(String[] args) {
        // 2. 创建Map集合存储学生:键:Student,值:String
        Map<Student,String> map = new HashMap<>();
        // Map<String,Student> map01 = new HashMap<>();


        // 3. 添加多个学生到Map集合中
        map.put(new Student("rose",18),"东莞");
        map.put(new Student("lucy",30),"广州");

        map.put(new Student("lily",28),"深圳"); // 66666 % 16 = 1
        map.put(new Student("lily",28),"珠海"); // 66666 % 16 = 1

        // 4. 遍历输出Map集合学生数据
        Set<Entry<Student, String>> entrySet = map.entrySet();
        for (Entry<Student, String> entry : entrySet) {
            System.out.println(entry);
        }
    }
}
package com.itheima._05HashMap存储自定义类型;

import java.util.Objects;

/**
 1. 定义学生类封装姓名和年龄
 */
public class Student {
    private String name;
    private int age;

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

    public Student() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", 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);
    }
}

6.LinkedHashMap

  1. 概述

    • 继承HashMap 能够保证存取有序

    • 底层:哈希表+链表

      package com.itheima._06LinkedHashMap基本使用;
      
      import java.util.HashMap;
      import java.util.LinkedHashMap;
      import java.util.Set;
      
      /**
          目标:掌握LinkedHashMap集合的特点
      
          讲解:
              1. LinkedHashMap概述
                  * 底层结构:哈希表+链表
                  * 继承了HashMap:能够保证存取有序。
      
          小结:
              LinkedHashMap集合的特点:继承了HashMap:能够保证存取有序。
       */
      public class Demo06 {
          public static void main(String[] args) {
              // 创建Map集合
              LinkedHashMap<String,String> map = new LinkedHashMap<>();
              map.put("fasfasf", "fasf");
              map.put("423dsa", "fasf");
              map.put("gfdga", "fasf");
              map.put("xxaf", "fasf");
              // 获得键集合
              Set<String> keySet = map.keySet();
              for (String key : keySet) {
                  System.out.println(key+"="+map.get(key));
              }
          }
      }
      

7.Map集合练习

package com.itheima._07Map集合练习;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/**
    需求说明:
        从键盘中录入一个字符串:计算一个字符串中每个字符出现次数。
        "aaaabbbccceeeee"
        Map ==> 映射:一个对一个
        a=4
        b=3
        c=3
        e=5

        Map<Character,Integer> map;
        map.put("a",4);
        map.put("b",2);


    步骤分析:
        1. 创建键盘录入对象:Scanner
        2. 接收用户输入的字符串:String
        3. 创建Map集合存储字符与其出现次数的对应关系:Map<Character,Integer> map;
        4. 遍历字符串获得每一个字符:就是map集合的键
        5. 根据字符获得次数
            5.1 如果没有获取到,则代表字符是第1次出现,则添加键值对到map集合
            5.2 如果获得到,则将次数加一更新到Map集合中
        6. 遍历Map集合输出键和值
 */
public class Demo07 {
    public static void main(String[] args) {
        // 1. 创建键盘录入对象:Scanner
        Scanner sc = new Scanner(System.in);
        // 2. 接收用户输入的字符串:String
        System.out.println("请输入一个字符串...");
        String line = sc.nextLine();
        // 3. 创建Map集合存储字符与其出现次数的对应关系:Map<Character,Integer> map;
        Map<Character,Integer> map = new LinkedHashMap<>();
        // 4. 遍历字符串
        for (int i = 0; i < line.length(); i++) { // aabc
            // 根据索引获得字符:就是map集合的键
            char ch = line.charAt(i); // b
            // 将字符作为键到map集合中获得值:字符出现次数
            Integer count = map.get(ch); // null
            // 判断count是否有值
            if (count != null) {
                map.put(ch, count + 1); // {a=2}
            } else {
                // 第1次出现:添加键值对到map集合
                map.put(ch, 1); // {a=1,b=1}
            }
        }
        // 6. 遍历Map集合输出键和值
        Set<Character> keySet = map.keySet();
        for(Character key:keySet){
            System.out.println(key+"="+map.get(key));
        }
    }
}
package com.itheima._07Map集合练习;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/**
    需求说明:
        从键盘中录入一个字符串:计算一个字符串中每个字符出现次数。
        "aaaabbbccceeeee"
        Map ==> 映射:一个对一个
        a=4
        b=3
        c=3
        e=5

        Map<Character,Integer> map;
        map.put("a",4);
        map.put("b",2);


    步骤分析:
        1. 创建键盘录入对象:Scanner
        2. 接收用户输入的字符串:String
        3. 创建Map集合存储字符与其出现次数的对应关系:Map<Character,Integer> map;
        4. 遍历字符串获得每一个字符:就是map集合的键
        5. 根据字符获得次数
            5.1 如果没有获取到,则代表字符是第1次出现,则添加键值对到map集合
            5.2 如果获得到,则将次数加一更新到Map集合中
        6. 遍历Map集合输出键和值
 */
public class Demo071 {
    public static void main(String[] args) {
        // 1. 创建键盘录入对象:Scanner
        Scanner sc = new Scanner(System.in);
        // 2. 接收用户输入的字符串:String
        System.out.println("请输入一个字符串...");
        String line = sc.nextLine();
        // 3. 创建Map集合存储字符与其出现次数的对应关系:Map<Character,Integer> map;
        Map<Character,Integer> map = new LinkedHashMap<>();
        // 4. 遍历字符串
        for (int i = 0; i < line.length(); i++) { // aabc
            // 根据索引获得字符:就是map集合的键
            char ch = line.charAt(i); // b
            if (map.containsKey(ch)){
                // 不是第一次
                map.put(ch, map.get(ch)+1);
            }else {
                // 第1次
                map.put(ch, 1);
            }
        }
        // 6. 遍历Map集合输出键和值
        Set<Character> keySet = map.keySet();
        for(Character key:keySet){
            System.out.println(key+"="+map.get(key));
        }
    }
}

8. 冒泡排序

  1. 算法原理概述

    相邻元素比较大小,大的放后面,小的放前面

  2. 冒泡排序算法代码演示

    package com.itheima._10排序算法;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    
    /**
        目标:理解冒泡排序算法的原理
    
        讲解:
            1. 冒泡排序算法原理概述
                相邻元素比较大小,大的放后面,小的放前面。
                [1,4,2,7,3]
    
                第1趟
                    第1次:[1,4,2,7,3]
                    第2次:[1,2,4,7,3]
                    第3次:[1,2,4,7,3]
                    第4次:[1,2,4,3,7]
    
                第2趟
                    第1次:[1,2,4,3,7]
                    第2次:[1,2,4,3,7]
                    第3次:[1,2,3,4,7]
    
                第3趟
                    第1次:[1,2,3,4,7]
                    第2次:[1,2,3,4,7]
    
                第4趟
                    第1次:[1,2,3,4,7]
    
                循环趟数 = 数组元素个数 - 1;
                   每趟比较的次数 = 数组元素个数 - 趟数
    
    
            2. 冒泡排序算法代码演示
                * 使用冒泡排序算法对数组元素排序:[55, 22, 99, 88]
    
        小结:
            冒泡排序算法原理:比较相邻的元素,大的往后放,小的往前放
     */
    public class Demo11 {
        public static void main(String[] args) {
            // test01();
            test02();
        }
    
        // 使用冒泡排序对集合排序
        public static void test02() {
            // 定义集合
            ArrayList<Integer> list = new ArrayList<>();
            // 添加元素
            list.add(42);
            list.add(12);
            list.add(62);
            list.add(2);
            list.add(22);
            System.out.println("排序前:" + list);
            // 外循环:控制比较的趟数
            for (int i = 0; i < list.size() - 1 ; i++) {
                // 内循环:控制每趟比较的次数
                for (int j = 0; j < list.size() - i - 1; j++) {
                    if (list.get(j) > list.get(j + 1)) {
                        int temp = list.get(j);
                        list.set(j, list.get(j+1));
                        list.set(j+1, temp);
                    }
                }
            }
            System.out.println("排序后:" + list);
        }
    
        // 使用冒泡排序对数组排序
        public static void test01() {
            // 定义数组
            int[] arr = {7,14,26,7,3};
            System.out.println("排序前:" + Arrays.toString(arr));
            // 外循环:控制比较的趟数
            for (int i = 0; i < arr.length - 1 ; i++) {
                // 内循环:控制每趟比较的次数
                for (int j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j+1]) {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j+1] = temp;
                    }
                }
            }
            System.out.println("排序后:" + Arrays.toString(arr));
        }
    }
    
    

9.可变参数

  • sum(int… a) int…数组

一个方法只有一个可变参数

非可变参数 一定要在最前面

数据类型…数组名 本质: 数组

package com.itheima._13可变参数;

/**
    目标:能够在方法参数列表中使用可变参数

    讲解:
        1. 可变参数引入:
            定义一个方法求2个整数之和
            定义一个方法求3个整数之和

        2. 什么是可变参数
            JDK1.5新特性
            参数个数可以是任意个:0到n

        3. 可变参数的格式
            数据类型...变量名
            本质:数组

        4. 可变参数的注意事项
            一个方法参数列表中只能有一个可变参数
            可变参数必须出现在参数列表的最后

    小结:
        1. 可变参数格式
            数据类型...数组名

        2. 可变参数的本质
            数组

 */
public class Demo13 {

    public static void main(String[] args) {
        System.out.println(sum(20));// 0
        System.out.println(sum(4)); // 0
        System.out.println(sum(1, 2)); // 2
        System.out.println(sum(1, 2,3));// 5
        System.out.println(sum(1, 2,3,3,432,1,412,423,41,4,14,1));// 1336
    }

    // 使用可变参数
    public static int sum(int a,int...arr){ // [I@6d86b085
        // System.out.println(arr);
        // 定义求和变量
        int result = 0;
        for (int num : arr) {
            result += num;
        }
        return result;
    }

   /* // 定义一个方法求2个整数之和
    public static int sum(int a,int b){
        return a + b;
    }

    // 定义一个方法求3个整数之和
    public static int sum(int a,int b,int c){
        return a + b + c;
    }*/
}

10.Collections 工具类

  1. public static boolean addAll(Collection c,T… e)

    将数组中的所有元素添加到指定的集合中

  2. public static void shuffle(List<?> list)

    将集合元素乱序

  3. public static void short()(List list)

    将集合元素进行排序,默认是升序排序

    package com.itheima._11Collections工具类;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    /**
        目标:掌握Collections工具类常用方法
    
        讲解:
            Collections工具类常用方法
             public static <T> boolean addAll(Collection<T> c, T... elements)
                将数组中的所有元素添加到指定的集合中
    
             public static void shuffle(List<?> list)
                将集合元素乱序
    
             public static <T> void sort(List<T> list)
                对集合元素进行排序,默认是升序排序
    
        小结:
            1. addAll方法的作用:添加多个元素到指定集合中
            2. shuffle方法的作用:对集合元素乱序
            3. sort方法的作用:对集合元素排序,默认是升序
     */
    public class Demo11 {
        public static void main(String[] args) {
            // 创建集合
            ArrayList<Integer> list = new ArrayList<>();
            System.out.println(list);
            // 添加元素
            Collections.addAll(list,34,4,341,3,33,13,1,354,7675);
            System.out.println(list);
    
            // 对集合元素乱序
            // shuffle:洗牌
            Collections.shuffle(list);
            System.out.println(list);
    
            // 对集合元素排序
            Collections.sort(list);
            System.out.println(list);
        }
    }
    
    

11.Comparator自定义比较器

package com.itheima._12自定义Comparator比较器;

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

/**
    目标:自定义Comparator比较器对集合元素[整型]排序

    讲解:
        1. Collections工具类中与自定义比较器相关的方法
            * public static <T> void sort(List<T> list,Comparator<T> c)
                * 使用自定义比较器对集合元素进行排序
                * Comparator是一个接口,需要创建接口实现类对象:比较器

        2. 自定义Comparator比较器对集合排序:集合存储整型数据

    小结:
        1. 自定义Comparator比较器的步骤
            * 创建类实现Comparator接口
            * 实现重写compare方法:在该方法中编写排序规则:
                * return o1 - o2 升序
                * return o2 - o1 降序
 */
public class Demo121 {
    public static void main(String[] args){
        // 创建集合对象
        ArrayList<Integer> list = new ArrayList<>();
        // 将数组中的元素添加到指定的集合中
        Collections.addAll(list,1,4,2,7,3);
        System.out.println("排序前:" + list);

        // 创建比较器对象
        // MyComparator comparator = new MyComparator();
        // 自定义比较器排序集合元素:升序排序
        // Collections.sort(list,comparator);

        // 使用匿名内部类直接创建比较器对象
        Collections.sort(list,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println("排序后:" + list);
    }
}

/*
    自定义比较器步骤
       1. 创建类实现Comparator接口
       2. 实现Comparator接口中的抽象方法:compare
       3. 在compare方法定义比较规则
 */
//  1. 创建类实现Comparator接口
class MyComparator implements Comparator<Integer> {
    // 2. 实现Comparator接口中的抽象方法:compare
    // 不需要手动调用该方法,sort方法内部会自动触发该方法的调用
    // 归并排序+快速排序
    @Override
    public int compare(Integer o1, Integer o2) { // o1 = 1,o2 = 4
        //  3. 在compare方法定义比较规则
        // o1 - o2: 升序
        // o2 - o1: 降序
        return o2.compareTo(o1);
    }

}

package com.itheima._12自定义Comparator比较器;

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

/**
    目标:自定义Comparator比较器对集合元素[自定义对象]排序

    讲解:
        1. 自定义Comparator比较器对集合排序:集合存储自定义对象
            public static <T extends Comparable> void sort(List<T> list)
            如果想使用该方法对集合元素进行排序,则要求集合的元素必须实现了Comparable接口
 */
public class Demo122 {
    public static void main(String[] args){
        // 创建集合
        ArrayList<Student> list = new ArrayList<>();
        // 添加学生
        list.add(new Student("jack",20,90));
        list.add(new Student("rose",50,76));
        list.add(new Student("lily",30,95));
        list.add(new Student("lucy",19,80));

        // 自定义比较器:对集合学生进行排序
        Collections.sort(list,new Comparator<Student>(){
            @Override
            public int compare(Student o1, Student o2) {
                // 按照年龄升序排序
                // return o1.getAge() - o2.getAge();
                // 按照成绩降序排序
                return o1.getScore() - o2.getScore();
            }
        });
        for (Student stu : list) {
            System.out.println(stu);
        }
    }
}

package com.itheima._12自定义Comparator比较器;

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

/**
    目标:自定义Comparator比较器对集合元素[自定义对象]排序

    讲解:
        1. 自定义Comparator比较器对集合排序:集合存储自定义对象

        public static <T extends Comparable> void sort(List<T> list)
            如果想使用该方法对集合元素进行排序,则要求集合的元素必须实现了Comparable接口

    小结
        对自定义对象进行排序方式
        1. 自定义比较器
            * 创建集合对象
            * 添加自定义对象到集合中
            * 调用Collections工具类的sort(集合对象,比较器对象);
            * 在自定义比较器的compare方法中定义排序规则

        2. 让自定义类实现Comparable接口
            * 自定义类实现Comparable接口,重写compareTo方法:定义排序规则
            * 创建集合对象
            * 添加自定义对象到集合中
            * 调用Collections工具类的sort(集合对象);排序
                    内部会自定调用自定义类重写的compareTo方法
 */
public class Demo123 {
    public static void main(String[] args){
        // 创建集合
        ArrayList<Student> list = new ArrayList<>();
        // 添加学生
        list.add(new Student("jack",20,90));
        list.add(new Student("rose",50,76));
        list.add(new Student("lily",30,95));
        list.add(new Student("lucy",19,80));

        // 对集合中的学生排序
        Collections.sort(list);

        for (Student stu : list) {
            System.out.println(stu);
        }
    }
}

package com.itheima._12自定义Comparator比较器;


import java.util.Objects;

/**
 * 定义一个学生类,包含姓名/年龄/成绩三个成员变量。
 */
public class Student implements Comparable<Student>{
    private String name;
    private int age;
    private int score;

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

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

    public Student() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }

    // 重写Comparable接口方法
    // 作用:用来定义排序规则
    @Override
    public int compareTo(Student o) {
        // this ==> o1
        // o ==> o2
        return o.age - this.age;
    }
}

12.总结

/**
教学目标
- 能够使用集合工具类Collections
addAll:将数组的元素添加到指定的集合中
shuffle:对集合元素乱序
sort(List list):对集合元素排序,默认升序
sort(List list, Comparator c):使用自定义比较器对集合元素排序,

     - 能够使用Comparator比较器进行排序
        1. 创建类实现Comparator接口并重写compare方法
        2. 在compare方法中编写比较规则:
            return o1 - o2; // 升序
            return o2 - o1; // 降序

     - 能够使用可变参数
        概述:JDK1.5新特性,参数个数任意
        格式:数据类型...数组名
        本质:数组

     - 能够理解冒泡排序的原理
        比较相邻的元素,大的放在后面,小的放前面

     - 能够说出Map集合特点:双列集合,存储键值对数据:键唯一,值可以重复。
     - 使用Map集合添加方法保存数据
           V put(K key,V value)
            有则修改,无则添加

     - 使用”键找值”的方式遍历Map集合
        1. 调用Map集合的keySet方法获得键集合
        2. 使用增强for或迭代器遍历键集合获得每一个键
        3. 调用Map集合的get方法根据键获得值

     - 使用”键值对”的方式遍历Map集合
        1. 调用Map集合的entrySet方法获得Entry对象集合
        2. 使用增强for或迭代器遍历Entry对象集合获得每一个Entry对象
        3. 调用Entry对象的getKey和getValue方法获得键和值

     - 能够使用HashMap存储自定义键值对的数据
        HashMap<Student,String> 如果需要去重,需要重写hashCode和equals方法
        HashMap<String,Student> 不需要重写hashCode和equals方法




知识回顾
    1. Iterator迭代器
        作用:用来遍历集合
        Collection接口与获取迭代器相关的方法:Iterator iterator();
        如何获得迭代器对象:集合对象.iterator();
        常用方法:
            boolean hasNext(); 判断是否有下一个元素,有返回true,否则false
            E next(); 将指针下移指向下一个元素并返回当前位置的元素

    2. 增强for
        作用:用来遍历集合和数组
        格式:for(数据类型 变量名:数组或集合){ }
        本质:迭代器

        List体系:有序,有索引,元素可重复
    3. ArrayList:数组结构,增删慢,查询快
    4. LinkedList:链表结构,增删快,查询慢
        Set体系:无序,无索引,元素不可重复
    5. HashSet:哈希表(数组+链表+红黑树(JDK1.8))
    6. LinkedHashSet:哈希表+链表:能够保证存取有序。

*/
记得点赞关注哦 !谢谢你们!加油!ヾ(◍°∇°◍)ノ゙

``

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值