TreeMap、Set接口、HashSet常用方法


title: TreeMap、Set接口、HashSet常用方法
date: 2020-08-31 17:22:50
tags: [java基础,TreeMap,HashSet]

TreeMap的使用和底层实现

TreeMap是红黑二叉树的典型实现。

    package cn.yishan.collection;

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

    /**
    * 测试TreeMap的使用
    * @author yishan
    */
    public class TestTreeMap {
        public static void main(String[] args) {
            Map<Integer,String> treemap1 = new TreeMap<>();
            treemap1.put(20,"aa");
            treemap1.put(3,"bb");
            treemap1.put(6,"cc");
            //按照key递增的方式排序
            for (Integer key:treemap1.keySet()){
                System.out.println(key+"---"+treemap1.get(key));
            }

            Map<Emp,String> treemap2 = new TreeMap<>();
            treemap2.put(new Emp(100,"张三",2000),"张三一个人");
            treemap2.put(new Emp(200,"王二",5000),"王二一个人");
            treemap2.put(new Emp(150,"李四",6000),"李四一个人");
            treemap2.put(new Emp(50,"赵柳",6000),"周六一个人");
            for (Emp key:treemap2.keySet()){
                System.out.println(key+"---"+treemap2.get(key));
            }
        }
    }

    class Emp implements Comparable<Emp>{
        int id;
        String name;
        double salary;

        public Emp(int id, String name, double salary) {
            this.id = id;
            this.name = name;
            this.salary = salary;
        }

        @Override
        public String toString() {
            return "id:" + id + ",name:" + name + ",salary:" + salary;
        }

        @Override
        public int compareTo(Emp o) { //负数:小于,0:等于,正数:大于
            if (this.salary>o.salary){
                return 1;
            }else if (this.salary<o.salary){
                return -1;
            }else {
            if (this.id>o.id){
                return 1;
            }else if (this.id<o.id){
                return -1;
            }else{
                return 0;
            }
            }
        }
    }

HashMap与HashTable的区别

  • 1.HashMap:线程不安全,效率高。允许key或value为null.
  • 2.HashTable:线程安全,效率低。不允许key或value为null.

Set接口

Set容器的特点:无序、不可重复。无序指Set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切的讲,新元素如果和Set中某个元素通过equals()方法对比为true,则不能加入;甚至,Set中也只能放入一个null元素,不能多个。

Set常用的实现类有:HashSet、TreeSet等,我们一般使用HashSet

    package cn.yishan.collection;

    import java.util.HashSet;
    import java.util.Set;

    /**
    * 测试HashSet的基本用法
    * Set:没有顺序,不可重复
    * List:有顺序,可重复
    * @author yisahn
    */
    public class TestHashSet {
        public static void main(String[] args) {
            Set<String> set1 = new HashSet<>();

            set1.add("aa");
            set1.add("bb");
            set1.add("aa");
            System.out.println(set1);
            set1.remove("bb");
            System.out.println(set1);

            Set<String> set2 = new HashSet<>();
            set2.add("ddd");
            set2.addAll(set1);
            System.out.println(set2);

        }
    }

Set的底层也是Map,set是作为map的K来存储,所以不可重复

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值