Set 和 Map

Set 接口

概念

  1. 元素有序,以某种规则保证存入的元素不出现重复
  2. 主要有两个实现类:HashSet 和 TreeSet 。
    HashSet 根据对象的哈希值来确定元素在集合中的存储位置,具有良好的存取、查找功能
    TreeSet 以二叉树的方式存取元素,可以实现对集合中的元素进行排序

HashSet

存储的元素不可重复,并且元素无序

    public static void main(String[] args) {
        HashSet set = new HashSet();
        set.add("hello");
        set.add("hi");
        set.add("hello");
        set.add("ABC");
        for(Object x:set){
            System.out.println(x);
        }
    }

请添加图片描述
对于自定义类型对象存入 HashSet 要重写 hashCode() 和 equals() 方法

class Per{
    public int id;
    public String name;

    public Per(int id,String name){
        this.id = id;
        this.name = name;
    }

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

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

    @Override
    public boolean equals(Object obj) {
        if(this == obj){
            return true;
        }
        if(obj == null || getClass() != obj.getClass()){
            return false;
        }
        Per p = (Per) obj;
        return id == p.id && Objects.equals(id,p.id);
    }
}

public class demoTest {
    public static void main(String[] args) {
        HashSet set = new HashSet();
        Per p1 = new Per(1,"张三");
        Per p2 = new Per(2,"李四");
        Per p3 = new Per(3,"王五");
        Per p4 = new Per(2,"李四");
        Per p5 = new Per(2,"赵六");

        set.add(p1);
        set.add(p2);
        set.add(p3);
        set.add(p4);
        set.add(p5);
        System.out.println(set);
    }
}

请添加图片描述

TreeSet

内部采用平衡二叉树来存储元素,集合中元素不可重复,并且元素有序

    public static void main(String[] args) {
        TreeSet t = new TreeSet();
        t.add(1);
        t.add(3);
        t.add(4);
        t.add(2);

        System.out.println(t);
        System.out.println("首元素:"+ t.first());
        System.out.println("尾元素:"+ t.last());
        System.out.println("集合中小于或等于2的最大的一个元素:"+t.floor(2));
        System.out.println("集合中大于2的最小的元素:"+t.higher(2));

        t.pollFirst();
        System.out.println("删除第一个元素后:"+t);
    }

请添加图片描述

自然排序

向 TreeSet 集合中存储的元素所在类必须实现 Comparable 接口,并且重写 compareTo() 方法,默认进行升序排序

class Per implements Comparable{
    public int id;
    public String name;

    public Per(int id,String name){
        this.id = id;
        this.name = name;
    }

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

    @Override
    public int compareTo(Object o) {
        Per p = (Per) o;
        if(this.id - p.id > 0){
            return 1;
        }
        if(this.id - p.id == 0){
            return this.name.compareTo(p.name);
        }
        return -1;
    }
}

public class demoTest {
    public static void main(String[] args) {
        TreeSet t = new TreeSet();
        Per p1 = new Per(1,"张三");
        Per p2 = new Per(2,"李四");
        Per p3 = new Per(3,"王五");
        Per p4 = new Per(2,"李四");

        t.add(p1);
        t.add(p2);
        t.add(p3);
        t.add(p4);
        System.out.println(t);
    }
}

请添加图片描述

Map 接口

概念

Map 接口是一种双列集合,每个元素都包含一个 Key 和 Value ,一个键对象 Key 对应唯一一个值对象 Value ,并且 Key 不允许重复

HashMap

该集合的键和值允许为空,但键不重复,并且集合中元素无序
向集合中添加已存在的键值元素时会覆盖已存在的键值元素

    public static void main(String[] args) {
        Map map = new HashMap();
        
        map.put(1,"Hi");
        map.put(2,"Hello");
        map.put(3,"World");
        map.put(3,"Word");

        System.out.println(map);
    }

请添加图片描述

TreeMap

不允许出现重复的 Key ,同样存储键值映射关系

public static void main(String[] args) {
        Map map = new TreeMap();

        map.put(1,"Hi");

        map.put(3,"World");
        map.put(2,"Hello");
        map.put(3,"Word");

        System.out.println(map);
    }

请添加图片描述

HashTable

Map 接口还有一个实现类 HashTable ,它和 HashMap 相似
HashTable 类有一个子类 Properties 在实际中很重要,Properties 主要用来存储字符串类型的键和值,但实际开发中,Properties常用来存取应用的配置项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值