Day20(SetTest,MapDemo,ArrayListAndHashMap,CollectionsDemo,HashMapAndHashtable,LinkedHashMap,TreeMap)

一、Set Test1

package com.shujia.lhw.day20;

import java.util.HashSet;

/*
    HashSet集合存储自定义对象并遍历
    如果对象的成员变量值相同即为同一个对象

    1、创建一个学生类
    2、创建HashSet集合对象
    3、创建5个学生对象
    5、将学生对象添加到集合当中
    6、遍历

 */
public class SetTest1 {
    public static void main(String[] args) {
        //创建HashSet集合对象
        HashSet<Student1> set = new HashSet<>();

        //创建5个学生对象
        Student1 s1 = new Student1("明旺",18);
        Student1 s2 = new Student1("王宇",17);
        Student1 s3 = new Student1("周家祥",19);
        Student1 s4 = new Student1("张保桂",20);
        Student1 s5 = new Student1("明旺",18);

        //将学生对象添加到集合当中
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        set.add(s5);

        //遍历
        for (Student1 student1 : set) {
            System.out.println(student1.getName()+"---"+student1.getAge());
        }
    }
}
package com.shujia.lhw.day20;

import java.util.Objects;

public class Student1 {
    private String name;
    private int Age;

    public Student1() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return Age;
    }

    public void setAge(int age) {
        Age = age;
    }

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

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

    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                ", Age=" + Age +
                '}';
    }
}

----------------------------------------------------------------------------------------------------------------------------

二、SetTest2

package com.shujia.lhw.day20;

import java.util.Comparator;
import java.util.TreeSet;

/*
    TreeSet集合存储自定义对象并遍历
    如果对象的成员变量值相同即为同一个对象
    按照年龄进行从大到小排序

 */
public class SetTest2 {
    public static void main(String[] args) {
        //无参构造,走的是自然排序
//        TreeSet<Student2> set1 = new TreeSet<>();
        //带参数构造方法,走的是比较器排序
        //匿名内部类实现
        TreeSet<Student2> set1 = new TreeSet<>(new Comparator<Student2>(){
            @Override
            public int compare(Student2 o1, Student2 o2) {
//                return 0;
                //按照年龄从大到小排序
                int i = o2.getAge() - o1.getAge();
                //隐含条件
                //年龄一样,姓名不一定一样
                int i2 = i == 0 ? o1.getName().compareTo(o2.getName()):i;

                return i2;
            }
        });

        //创建学生对象
        Student2 s1 = new Student2("刘备",18);
        Student2 s2 = new Student2("曹操",19);
        Student2 s3 = new Student2("孙权",7);
        Student2 s4 = new Student2("诸葛亮",11);
        Student2 s5 = new Student2("司马懿",19);
        Student2 s6 = new Student2("刘备",20);

        //将学生对象添加到集合中
        set1.add(s1);
        set1.add(s2);
        set1.add(s3);
        set1.add(s4);
        set1.add(s5);
        set1.add(s6);

        //遍历
        for (Student2 student2 : set1) {
            System.out.println(student2.getName()+"---"+student2.getAge());
        }
    }
}
package com.shujia.lhw.day20;

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

    public Student2() {
    }

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

    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 "Student2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student2 o) {
//        return 0;
        //按照年龄从大到小进行排序
        int i = o.getAge() - this.age;
        //隐含条件
        //年龄一样,姓名不一定一样
        int i2 = i == 0 ? o.name.compareTo(this.name):i;

        return i2;
    }
}

-------------------------------------------------------------------------------------------------------------------------------

三、SetTest3

package com.shujia.lhw.day20;

import java.util.Comparator;
import java.util.TreeSet;

/*
    键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台

    1、创建学生类
    2、创建集合对象TreeSet
    3、创建学生对象
    4、将学生对象添加到集合当中
    5、遍历
 */
import java.util.Scanner;

public class SetTest3 {
    public static void main(String[] args) {
        //比较器排序
        TreeSet<Student3> set = new TreeSet<>(new Comparator<Student3>() {
            @Override
            public int compare(Student3 o1, Student3 o2) {
//                return 0;
                //按照总分从高到低输出到控制台
                int i = o2.getSumScore() - o1.getSumScore();
                //挖掘隐含条件
                //总分一样,语文成绩不一定一样
                int i2 = i == 0 ? o2.getChinese() - o1.getChinese() : i;
                //语文成绩一样,数学成绩不一定一样
                int i3 = i2 == 0 ? o2.getMath() - o1.getMath() : i2;

                //各科成绩一样姓名不一定一样
                int i4 = i3 == 0 ? o1.getName().compareTo(o2.getName()) : i3;

                return i4;
            }
        });

        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        //使用创建学生对象并添加到集合当中
        for (int i = 0; i <= 5; i++) {
            System.out.println("请输入第" + i + "个学生的姓名:");
            String name = sc.next();
            System.out.println("请输入" + i + "学生的语文成绩:");
            int chinese = sc.nextInt();
            System.out.println("请输入" + i + "学生的数学成绩:");
            int math = sc.nextInt();
            System.out.println("请输入" + i + "学生的英语成绩:");
            int english = sc.nextInt();

            //创建学生对象
//            Student3 student = new Student3(name,chinese,math,english);
            Student3 student3 = new Student3();
            student3.setName(name);
            student3.setChinese(chinese);
            student3.setMath(math);
            student3.setEnglish(english);

            //将学生对象添加到集合当中
            set.add(student3);
        }
        System.out.println("=====================================================");
        System.out.println("学生的信息如下:");
        System.out.println("姓名\t语文成绩\t数学成绩\t英语成绩\t总成绩");
        //遍历学生信息
        for (Student3 student3 : set) {
            System.out.println(student3.getName()+"\t"+student3.getChinese()+"\t"+student3.getMath()
            +"\t"+student3.getEnglish()+"\t"+student3.getSumScore());
        }
    }
}
package com.shujia.lhw.day20;

public class Student3 {
    private String name;
    private int chinese;
    private int math;
    private int english;

    public Student3() {
    }

    public Student3(String name, int chinese, int math, int english) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
    }

    public String getName() {
        return name;
    }

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

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }
//定义获取总分的方法
    public int getSumScore(){
        return chinese+math+english;
    }
    @Override
    public String toString() {
        return "Student3{" +
                "name='" + name + '\'' +
                ", chinese=" + chinese +
                ", math=" + math +
                ", english=" + english +
                '}';
    }
}

--------------------------------------------------------------------------------------------------------------------------------

四、Map

package com.shujia.lhw.day20;
/*
    Map接口的概述:
      将键映射到值的对象
      Map不能包含重复的键
      每个键可以映射到最多一个值

    举例:
      <k,v>
      1001 王宇
      1002 周家祥
      1001 周家祥(不允许)
    Map集合中,K的值不能重复

    Map接口与Collection接口的区别:
      1、Map接口与Collection接口是平级关系,不存在继承关系,都是属于util包下的
      2、Map中的元素都是成对出现的,Map集合中的键是唯一的,值是可以重复的,又称之为:夫妻对
      3、Collection集合中的元素都是单独出现的,Collection接口下面有一个子接口Set,它的元素也是唯一

      List中的元素也是单独存出现,可以重复,像这样单独存在的元素,称之为:光棍

    Map接口中的方法:
      1、添加功能:
        V put(k key,V value)将指定值与该映射中的指定键相关联(可选操作)
        举例:map.put(1001,"王宇");

      2、删除功能:
        void clear()从Map中删除所有的映射(可选操作)
        V remove(Object key)如果存在(可选操作),从该Map中删除一个键的映射

      3、判断功能:
        boolean containsKey(Object key)如果此映射包含指定键的映射,则返回true
        boolean containsValue(Object value)如果Map将一个或多个键映射到指定的值,则返回true
        boolean isEmpty()如果Map不包含键值映射,则返回true

      4、获取功能:
        V get(Object key)返回指定键所映射的值,或null 如果此映射包含键的映射
        Set<K> keySet()返回此Map中包含的键的Set视图
        Collection<V> values()返回此Map中所包含的值的Collection视图
        Set<Map.Entry<K,V>> entrySet()获取Map中的所有元素,元素的类组成是由一个键和一个值组成

      5、长度功能:
        int size()返回此Map中键值映射的数量

 */

import com.sun.org.apache.bcel.internal.generic.IUSHR;

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

public class MapDemo {
    public static void main(String[] args) {

        //创建Map集合对象
        //由于Map是一个接口,所以接口不能实例化,要使用一个具体的子类来进行实例化
        //这里借助HashMap
        Map<String,String> map = new HashMap<>();

        //添加元素
        //V put(K key,V value)将指定的值与该映射中的键相关联(可选操作)
        //这里的返回值是将来再次插入同一个键的时候,被覆盖的那个值
        System.out.println(map.put("黄晓明","杨颖"));
        System.out.println(map.put("邓超","孙俪"));
        System.out.println(map.put("小虎","冯提莫"));
        System.out.println(map.put("小虎","IU"));
        map.put("黄晓明","杨颖");
        map.put("邓超","孙俪");
        map.put("小虎","冯提莫");
        map.put("小虎", "IU");

        //删除功能:
        //void clear()从该Map中删除所有的映射(可选操作)
//        map.clear();
//        V remove(Object key)如果存在(从可选的操作),从该Map中删除一个键的映射
        //返回对应删除的值
//        System.out.println(map.remove("小虎"));
        System.out.println("==============================================]");
        //boolean containsKey(Object key)如果此映射包含指定键的映射,则返回true
        System.out.println(map.containsKey("小虎"));
        //boolean containsValue(Object value)如果此Map将一个或多个键映射到指定的值,则返回true
        System.out.println(map.containsValue("IU"));
        System.out.println(map.isEmpty());
        System.out.println("====================================================");

        System.out.println(map);
    }
}

-------------------------------------------------------------------------------------------------------------------------

五、Map 2

package com.shujia.lhw.day20;

import java.util.Collection;
import java.util.HashMap;
import java.util.Set;

/*
    Map集合的获取功能:
      V get(Object key)返回指定键所映射的值,或 null如果此映射包含该建的映射
      Set<K> keySet()返回此Map中包含的键的Set视图
      Collection<V> values()返回此Map中包含的值的Collection视图

 */
public class MapDemo2 {
    public static void main(String[] args) {
        //创建Map集合对象
        HashMap<String,String> map = new HashMap<>();

        //向集合中添加元素
        map.put("黄晓明","杨颖");
        map.put("邓超","孙俪");
        map.put("小虎","冯提莫");
        map.put("张杰","谢娜");

        //V get(Object key)返回到指定键所映射到的值,或 null如果此映射包含改键的映射
        //根据key找值
        //如果map中不包含此key,则返回null
        System.out.println(map.get("小虎"));
        System.out.println(map.get("明旺"));
        System.out.println("===========================================");

        //Set<K> keySet()返回此Map中包含的键的Set视图
        Set<String> set = map.keySet();
        for(String s : set){
//            System.out.println(s);
            String value = map.get(s);
            System.out.println(s+":"+value);
        }

        //Collection<V> values() 返回此Map中包含的值的Collection视图
        Collection<String> values = map.values();
        for (String s : values) {
            System.out.println(s);
        }
    }
}

-----------------------------------------------------------------------------------------------------------------------

六、Map 3

package com.shujia.lhw.day20;

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

/*
    集合遍历的方式一:
      根据键找值
        1、通过调用keySet()方法获取Map集合中所有的key
        2、通过get(key)这个方法,可以获取到每一个key对应的value
        3、输出

 */
public class MapDemo3 {
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();

        //向集合中添加元素
        map.put("霞","洛");
        map.put("蛮王","寒冰");
        map.put("卢锡安","塞纳");
        map.put("盖伦","卡特");

        //通过调用keySet()方法获取Map集合中所有的key
        Set<String> keySet = map.keySet();

        //遍历keySet获取到每一个key
        for (String s : keySet) {
            String value = map.get(s);
            System.out.println(s+":"+value);
        }
    }
}

---------------------------------------------------------------------------------------------------------------------------------

七、Map 4

package com.shujia.lhw.day20;

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

/*
    Map集合遍历的第二种方式:
      依次先把所有的键值对获取到,然后再依次获取到每一个键值对的key和value
 */
public class MapDemo4 {
    public static void main(String[] args) {
        //1、创建集合对象
        HashMap<String,String> map = new HashMap<>();

        //2、向集合中添加元素
        map.put("王子1","白雪公主");
        map.put("王子2","灰姑娘");
        map.put("王子3","美人鱼");

        //遍历:依次先把所有的键值对获取到
        //Set<Map.Entry<K,V>> entrySet()获取Map中所有元素,元素的类组成是由一个键和一个值组成
        Set<Map.Entry<String,String>> set = map.entrySet();

        //遍历集合获取每一个键值对
        for (Map.Entry<String, String> keyValue : set) {
            String key = keyValue.getKey();
            String value = keyValue.getValue();
            System.out.println(key+":"+value);
        }
    }
}

---------------------------------------------------------------------------------------------------------------------------

八、Map 5

package com.shujia.lhw.day20;

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

/*
    HashMap<Integer,String>
 */
public class MapDemo5 {
    public static void main(String[] args) {
        //1、创建集合对象
        HashMap<Integer,String> map = new HashMap<>();

        //2、向集合中添加元素
        map.put(1001,"明旺");
        map.put(1002,"王宇");
        map.put(1003,"周家祥");
        map.put(1003,"张保桂");

        //3、遍历集合
        System.out.println("================方式一:根据键找值====================");
        //获取到所有的key
        Set<Integer> set = map.keySet();
        for (Integer i : set) {
            String s = map.get(i);
            System.out.println(i+":"+s);
        }

        System.out.println("=================方式二:根据键值对找键和值===================");
        Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
        for (Map.Entry<Integer, String> keyValue : entrySet) {
            Integer key = keyValue.getKey();
            String value = keyValue.getValue();
            System.out.println(key+":"+value);
        }

    }
}

------------------------------------------------------------------------------------------------------------------------------

九、Map 6

package com.shujia.lhw.day20;

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

/*
    HashMap<String,Student>
 */
public class MapDemo6 {
    public static void main(String[] args) {
        //1、创建集合对象
        HashMap<String,Student4> map = new HashMap<>();

        //2、创建学生对象
        Student4 s1 = new Student4("明旺",18);
        Student4 s2 = new Student4("王宇",17);
        Student4 s3 = new Student4("周家祥",19);
        Student4 s4 = new Student4("张保桂",19);

        //3、向集合中添加键对值
        map.put("帅气男孩",s1);
        map.put("一表人才",s2);
        map.put("油腻大叔",s3);
        map.put("忧郁男孩",s4);

        Set<Map.Entry<String,Student4>> entries = map.entrySet();
        for (Map.Entry<String,Student4>keyValue:entries){
            String key = keyValue.getKey();
            Student4 value = keyValue.getValue();
            System.out.println(key+":"+value);
        }
    }
}

---------------------------------------------------------------------------------------------------------------------------------十、Map 7

package com.shujia.lhw.day20;

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

/*
    HashMap<Student,String>

    如果key是自己定义的一个对象,该类需要重写hashCode方法和equals方法
    因为put方法的底层,添加元素的标准就是根据hashCode()方法和equals()的值来判断元素是否重复
 */
public class MapDemo7 {
    public static void main(String[] args) {
        //1、创建集合对象
        HashMap<Student5,String> map = new HashMap<>();

        //2、创建学生对象
        Student5 s1 = new Student5("王昭君",17);
        Student5 s2 = new Student5("貂蝉",16);
        Student5 s3 = new Student5("杨玉环",18);
        Student5 s4 = new Student5("西施",19);
        Student5 s5 = new Student5("王昭君",17);

        //将元素添加到集合中
        map.put(s1,"1111");
        map.put(s2,"2222");
        map.put(s3,"3333");
        map.put(s4,"4444");
        map.put(s5,"5555");

        //遍历
        Set<Map.Entry<Student5,String>> entries = map.entrySet();
        for (Map.Entry<Student5,String> keyValue:entries){
            Student5 key = keyValue.getKey();
            String value = keyValue.getValue();
            System.out.println(key+":"+value);
        }
    }
}

------------------------------------------------------------------------------------------------------------------------------

十一、ArrayListAndHashMap

package com.shujia.lhw.day20;

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

/*
    ArrayList嵌套HashMap
 */
public class ArrayListAndHashMap {
    public static void main(String[] args) {
        //定义一个ArrayList对象
        ArrayList<HashMap<String,String>> list = new ArrayList<>();

        //创建2个HashMap对象
        HashMap<String,String> map1 = new HashMap<>();
        map1.put("霞","洛");
        map1.put("卢锡安","塞纳");
        map1.put("蛮王","寒冰");
        map1.put("盖伦","卡特");

        HashMap<String,String> map2 = new HashMap<>();
        map2.put("邓超","孙俪");
        map2.put("张杰","谢娜");
        map2.put("小虎","冯提莫");

        list.add(map1);
        list.add(map2);

        //遍历
        for (HashMap<String, String> maps : list) {
            Set<Map.Entry<String,String>> entries = maps.entrySet();
            for (Map.Entry<String, String> keyValue : entries) {
                String key = keyValue.getKey();
                String value = keyValue.getValue();
                System.out.println(key+":"+value);
            }
        }
    }
}

--------------------------------------------------------------------------------------------------------------------------

十二、CollectionsDemo1

package com.shujia.lhw.day20;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/*
    Collections工具类的概述:
      针对集合操作的工具类

    Collections与Collection的区别:
      1、Collection是单列集合的顶层接口,有两大子接口List/Set
      2、Collections是针对于集合操作的工具类,可以对集合进行排序,还有查找(二分查找)

      public static <T> void sort(List<T> list)
      public static <T> int binarySearch(List<?> list,T key)
      public static <T> T max(Collection<?> coll)
      public static void reverse(List<?> list)
      public static void shuffle(List<?> list)

      static <T> List<T> synchronizedList(List<T> list)返回由指定列表支持的同步(线程安全)列表

 */
public class CollectionsDemo1 {
    public static void main(String[] args) {
        //创建List集合对象
        ArrayList<Integer> list = new ArrayList<>();

        //将ArrayList转换成线程安全的集合,返回的集合和原本的是一个存储空间
        List<Integer> list1 = Collections.synchronizedList(list);
//        System.out.println(list.hashCode());
//        System.out.println(list1.hashCode());

        //添加元素
        list1.add(10);
        list1.add(30);
        list1.add(20);
        list1.add(70);
        list1.add(40);
        list1.add(50);
        System.out.println(list);

        System.out.println("============================================");
        System.out.println("排序前的集合:"+list);
        //public static <T> void sort(List<T> list)
        Collections.sort(list);
        System.out.println("排序后的集合:"+list);
        System.out.println("================================================");

        //排序后的集合:[10,20,30,40,50,70]
        //public static <T> binarySearch(List<?> list,T key)二分查找前提是有序
        //二分查找,如果元素存在,返回该元素对应索引
        System.out.println(Collections.binarySearch(list,70));
        System.out.println(Collections.binarySearch(list,700));

        //public static <T> T max(Collection<?> coll)查找最大值
        System.out.println(Collections.max(list));

        //public static void reverse(List<?> list)反转
        Collections.reverse(list);
        System.out.println(list);

        //public static void shuffle(List<?> list)随机置换
        Collections.shuffle(list);
        System.out.println(list);


    }
}

----------------------------------------------------------------------------------------------------------------------------

十三、HashMapAndHashtable

package com.shujia.lhw.day20;

import java.util.HashMap;
import java.util.Hashtable;

/*
    面试题:HashMap和Hashtable的区别:
      1、HashMap和Hashtable他们存储的元素都是一个一个的键值对
      2、HashMap中的key和value允许为null值,而Hashtable不允许
      3、Hashtable是线程安全的,而HashMap是线程不安全的

 */
public class HashMapAndHashtable {
    public static void main(String[] args) {
        HashMap<String,String> map1 = new HashMap<>();
        map1.put(null,"123");
        map1.put("111",null);
        map1.put(null,null);
        System.out.println(map1);

        Hashtable<String,String> map2 = new Hashtable<>();
//        map2.put(null,"123");//Hashtable元素中的key不允许为null
//        map2.put("111",null);//Hashtable元素中的value不允许为null
//        map2.put(null,null);
        System.out.println(map2);
    }
}

----------------------------------------------------------------------------------------------------------------------------

十四、LinkedHashMapDemo

package com.shujia.lhw.day20;

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

/*
    LinkedHashMap:
      class LinkedHashMap extends HashMap implements Map{}
      哈希表和链表实现的Map接口,具有可预测的迭代次序
      哈希保证的是元素的唯一,保证key是唯一
      链表保证是有序的(存储和取出的顺序一致)

 */
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        LinkedHashMap<String,String> map = new LinkedHashMap<>();

        //向集合中添加元素
        map.put("1234","hello");
        map.put("4567","world");
        map.put("3456","java");
        map.put("7890","hadoop");
        map.put("1234","hive");

        //遍历
        Set<Map.Entry<String,String>> entries = map.entrySet();
        for(Map.Entry<String,String> keyValue:entries){
            String key = keyValue.getKey();
            String value = keyValue.getValue();
            System.out.println(key+":"+value);
        }

    }
}

-------------------------------------------------------------------------------------------------------------------------------

十五、TreeMapDemo1

package com.shujia.lhw.day20;

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
    TreeMap:键是基于红黑树存储的
    键:String
    值:String

 */
public class TreeMapDemo1 {
    public static void main(String[] args) {
        //1、创建集合对象
        TreeMap<String,String> map = new TreeMap<>();

        //创建元素并添加到集合中
        map.put("hello","你好");
        map.put("world","世界");
        map.put("java","面向对象的编程语言");
        map.put("mysql","结构化数据库");

        //遍历:
        Set<Map.Entry<String,String>> entries = map.entrySet();
        for(Map.Entry<String,String> keyValue:entries){
            String key = keyValue.getKey();
            String value = keyValue.getValue();
            System.out.println(key+":"+value);
        }
    }
}

-----------------------------------------------------------------------------------------------------------------------------

十六、TreeMapDemo2

package com.shujia.lhw.day20;

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
    TreeMap<String,String>
    键:Student键的存储是红黑树存储,可以保证键的排序和唯一
    值:String

 */
public class TreeMapDemo2 {
    public static void main(String[] args) {
        //1、创建TreeMap对象
//        TreeMap<Student6,String> map = new TreeMap<>();
        //推荐使用比较器排序,并且用匿名内部类实现
        TreeMap<Student6,String> map = new TreeMap<>(new Comparator<Student6>(){
            @Override
            public int compare(Student6 o1, Student6 o2) {
//                return 0;
                //判断年龄是否一样
                int i = o1.getAge() - o2.getAge();
                //年龄一样,姓名不一定一样
                int i2 = i == 0 ? o1.getName().compareTo(o2.getName()):i;

                return i2;
            }
        });

        //2、创建学生对象
        Student6 s1 = new Student6("明旺",18);
        Student6 s2 = new Student6("王宇",19);
        Student6 s3 = new Student6("周家祥",20);
        Student6 s4 = new Student6("张保桂",17);
        Student6 s5 = new Student6("明旺",18);

        //3、向集合中添加元素
        map.put(s1,"男枪");
        map.put(s2,"女警");
        map.put(s3,"卡特");
        map.put(s4,"霞");
        map.put(s5,"男枪");

        //遍历
        Set<Map.Entry<Student6,String>> entries = map.entrySet();
        for(Map.Entry<Student6,String> keyValue : entries){
            Student6 key = keyValue.getKey();
            String value = keyValue.getValue();
            System.out.println(key+":"+value);
        }
    }
}
package com.shujia.lhw.day20;

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

    public Student6() {
    }

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

    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 "Student6{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student6 o) {
//        return 0;
        //判断年龄是否一样
        int i = this.age - o.age;
        //年龄一样,姓名不一定一样
        int i2 = i == 0 ? this.name.compareTo(o.name):i;

        return i2;
    }
}

------------------------------------------------------------------------------------------------------------------------

十七、TreeMapDemo3

package com.shujia.lhw.day20;

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

/*
    "aababcabcdabcde"获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
    分析:
      1、定义一个字符串(后期可用键盘录入改进)
      2、定义一个TreeMap对象存储数据
        键:Character
        值:Integer
      3、将字符串转成字符数组
      4、遍历字符数组,得到每一个字符
      5、拿着这个字符作为键去map集合中去找,看返回值
        如果返回值是null,表示集合中没有该字符作为键,就把当前这个字符设置为键,value设置为1
        如果返回值不是null,说明集合中已经存在这个字符作为键,value值+1,然后重新放入到集合中
      6、定义一个StringBuffer作为拼接
      7、遍历集合得到键和值,按照对应的输出格式进行拼接
      8、把StringBuffer输出

    输入:aababcabcdabcde
    输出:a(5)b(4)c(3)d(2)e(1)
 */
public class TreeMapDemo3 {
    public static void main(String[] args) {
        //定义一个字符串(后期可用字符串改进)
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要统计的字符串:");
        String s = sc.next();

        //定义一个TreeMap对象存储数据
        TreeMap<Character,Integer> map = new TreeMap<>();

        //将字符串转成字符数组
        char[] chars = s.toCharArray();

        //遍历字符数组,得到每一个字符 增强for循环遍历
        for(Character ch : chars){
            //拿着这个字符作为键去Map集合中去找,看返回值get(key)
            Integer num = map.get(ch);

            //如果返回值是null,表示该集合中没有该字符作为键,就把当前这个字符设置为键,value设置为1
            if(num == null){
                map.put(ch,1);
            }else{
                //返回值不是null,说明集合中已经存在该字符作为键,value的值+1,然后重新放入到集合中
                num++;
                map.put(ch,num);
            }
        }

        //定义一个StringBuffer作为拼接
        StringBuffer sb = new StringBuffer();

        //遍历集合得到键和值,按照对相应的输出格式进行拼接
        Set<Map.Entry<Character,Integer>> entries = map.entrySet();
        for (Map.Entry<Character, Integer> keyValue : entries) {
            Character ch = keyValue.getKey();
            Integer number = keyValue.getValue();
            sb.append(ch).append("(").append(number).append(")");
        }

        //将StringBuffer转成字符串
        String result = sb.toString();
        System.out.println("统计结果为:"+result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘浩浩yyds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值