Java-TreeMap集合

1.TreeMap类

  • 概述:键是红黑树结构,可以保证键的排序和唯一性

遍历集合;

package com.bigdat.java.day22;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/*
            TreeMap类概述
                键是红黑树结构,可以保证键的排序和唯一性
 */
public class TreeMapDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        TreeMap<Integer, String> treeMap = new TreeMap();
        //向集合中添加元素
        treeMap.put(1001, "张三");
        treeMap.put(1002, "李四");
        treeMap.put(1003, "王五");
        treeMap.put(1001, "二狗子"); //结果会对张三的结果产生压盖,就只会产生二狗子
        treeMap.put(1004, "王二麻子");
        //遍历集合
        Set<Integer> integers = treeMap.keySet();
        for (Integer integer : integers) {
            String s = treeMap.get(integer);
            System.out.println("编号:"+integer+",姓名:"+s);
        }
        System.out.println("===============================================");
        Set<Map.Entry<Integer, String>> entries = treeMap.entrySet();
        Iterator<Map.Entry<Integer, String>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer, String> next = iterator.next();
            Integer key = next.getKey();
            String value = next.getValue();
            System.out.println("编号:"+key+",姓名:"+value);
        }
    }
}

HashMap<Student, String>

注意事项;排序分为自然排序
  • 自然排序:引用类型必须实现Comparable接口(因为源码中compar有一个向下转型的步骤),然后重写compareTo()方法;
    根据需求先比较什么什么就是主要条件因为红黑树采用中序遍历^,如下
@Override
    public int compareTo(Student4 o) {
        int i = this.name.compareTo(o.name);
        //姓名一样,年龄不一定一样
        int i2 = (i == 0) ? this.age - o.age : i;
        return i2;
    }
  • 比较器排序:调用的是引用类型中的有参构造器
    //TreeMap<Student4, Integer> tMap = new TreeMap<>();
    ,引用类中必须实现Comparator接口。然后重写compare()方法或直接在main()方法中实现匿名内部类操作
public class TreeMapDemo2 {
    public static void main(String[] args) {
        //创建集合对象
        //TreeMap<Student4, Integer> tMap = new TreeMap<>();
        //比较器排序
        //TreeMap tMap = new <Student4, Integer>TreeMap(new Student4());
        //匿名内部类实现比较器排序
        TreeMap<Student4, Integer> tMap = new TreeMap(new Comparator<Student4>(){

            @Override
            public int compare(Student4 o1, Student4 o2) {
                return 0;
            }
        });

代码如下:

import java.util.*;

/*
        HashMap<Student,String>
 */
public class TreeMapDemo2 {
    public static void main(String[] args) {
        //创建集合对象
        //TreeMap<Student4, Integer> tMap = new TreeMap<>();
        //比较器排序
        //TreeMap tMap = new <Student4, Integer>TreeMap(new Student4());
        //匿名内部类实现比较器排序
        TreeMap<Student4, Integer> tMap = new TreeMap(new Comparator<Student4>(){

            @Override
            public int compare(Student4 o1, Student4 o2) {
                return 0;
            }
        });
        //创建学生类对象
        Student4 s1 = new Student4("白骨精",10);
        Student4 s2 = new Student4("观世音菩萨",32);
        Student4 s3 = new Student4("铁扇公主",27);
        Student4 s4 = new Student4("白骨精",10);
        Student4 s5 = new Student4("太上老君",55);
        Student4 s6 = new Student4("比较的太上老君",55);

        //向集合中添加元素
        tMap.put(s1,1001);
        tMap.put(s2,1002);
        tMap.put(s3,1003);
        tMap.put(s4,1004);
        tMap.put(s5,1005);
        tMap.put(s6,1006);

        //遍历集合
        Set<Map.Entry<Student4, Integer>> entries = tMap.entrySet();
        Iterator<Map.Entry<Student4, Integer>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<Student4, Integer> next = iterator.next();
            Student4 key = next.getKey();
            Integer value = next.getValue();
            System.out.println("学生:"+key+",编号:"+value);
        }

    }
}

引用类型(Stuedent)代码如下:

package com.bigdat.java.day22;
import java.util.Comparator;

/*
    创建学生对象
 */
public class Student4 implements Comparator<Student4> {
    private String name;
    private int age;

    public Student4() {
    }

    public Student4(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 "Student4{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    /*
    如果走自然排序方法的话:引用类型实现Comparable() 方法
    然后重写compareTo 方法
        @Override
    public int compareTo(Student4 o) {
        int i = this.name.compareTo(o.name);
        //姓名一样,年龄不一定一样
        int i2 = (i == 0) ? this.age - o.age : i;
        return i2;
    }
     */
    //比较器排序,创建集合时需要传参,然后引用类型必须实现 Comparator 方法
    //然后再重写 compare 方法
    @Override
    public int compare(Student4 o1, Student4 o2) {
        int i = o1.age - o2.getAge();
        return i;
    }

}

TreeMap 遍历方法如下:

package com.bigdat.java.day22;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/*
            TreeMap类概述
                键是红黑树结构,可以保证键的排序和唯一性
 */
public class TreeMapDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        TreeMap<Integer, String> treeMap = new TreeMap();
        //向集合中添加元素
        treeMap.put(1001, "张三");
        treeMap.put(1002, "李四");
        treeMap.put(1003, "王五");
        treeMap.put(1001, "二狗子"); //结果会对张三的结果产生压盖,就只会产生二狗子
        treeMap.put(1004, "王二麻子");
        //遍历集合
        Set<Integer> integers = treeMap.keySet();
        for (Integer integer : integers) {
            String s = treeMap.get(integer);
            System.out.println("编号:"+integer+",姓名:"+s);
        }
        System.out.println("===============================================");
        Set<Map.Entry<Integer, String>> entries = treeMap.entrySet();
        Iterator<Map.Entry<Integer, String>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer, String> next = iterator.next();
            Integer key = next.getKey();
            String value = next.getValue();
            System.out.println("编号:"+key+",姓名:"+value);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值