集合——Set

Posted 做个机灵鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合——Set相关的知识,希望对你有一定的参考价值。

Set接口

1.set接口的主要实现类有HashSet和 TreeSet
2.HashSet是基于哈希表实现的,数据是无序的, HashSet元素可以是null,但只能有一个null
3.TreeSet是基于二又树实现的,可以实现数据的自动排序,确保集合元素处于排序状态,不允许放
4.HashSet的性能优于TreeSet,一般情况下建议使用 HashSet,如果需要使用排序功能建议使用TreeSet

代码实践:

对象类

import java.util.Objects;

//属性类
public class Cat {
    private String name;
    private int month;//年龄
    private String specise;//品种

    //构造方法
    public Cat(String name, int month, String specise) {
        this.name = name;
        this.month = month;
        this.specise = specise;
    }

    public String getName() {
        return name;
    }

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

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public String getSpecise() {
        return specise;
    }

    public void setSpecise(String specise) {
        this.specise = specise;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "名字='" + name + '\\'' +
                ", 年龄=" + month +
                ", 品种='" + specise + '\\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return month == cat.month && Objects.equals(name, cat.name) && Objects.equals(specise, cat.specise);
    }

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

实现类

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

public class CatText {
    public static void main(String[] args) {
        //定义宠物猫信息
        Cat hanghang = new Cat("黄黄",12,"英国短毛猫");
        Cat huahua = new Cat("花花",3,"白猫");
        //把宠物猫信息放入HashSet类里面
        //加入泛型就不用进行强制类型转换
        Set<Cat> set = new HashSet<Cat>();
        set.add(hanghang);
        set.add(huahua);
        //利用迭代器对集合进行遍历,输出猫的信息
        Iterator<Cat> it = set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        //添加一个属性相同的猫
        //无法添加
        System.out.println("************");
        System.out.println("添加一个属性相同的猫猫");
        Cat huahua01 = new Cat("huahua",3,"白猫");
        set.add(huahua);
        it = set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        //插入一个猫的信息
        System.out.println("**********");
        System.out.println("插入一个猫的信息");
        Cat huahua02 = new Cat("花花二代",2,"三花猫");
        set.add(huahua02);
        it=set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        //查询一个猫的信息,
        //第一种方法,利用对象名去查找
        System.out.println("************");
        System.out.println("利用对象查找一个猫的信息:");
        if(set.contains(huahua)){
            System.out.println("花花找到了");
            System.out.println(huahua);
        }else {
            System.out.println("没有找到花花这个猫");
        }
        //利用名字取查找信息
        //并输出这个猫的信息
        //利用迭代器进行遍历集合
        System.out.println("***********");
        System.out.println("利用猫名字去查找信息:");
        boolean flag = false;
        Cat c=null;
        it = set.iterator();
       while (it.hasNext()){
            //这里需要强制类型转换
             c = it.next();
            if(c.getName().equals("花花")){
                System.out.println("花花找到了");
                flag = true;
                break;
            }
           }
       //易错点
        //这里的输出语句要写在while外面,因为执行break后 就不会输出break后面的语句
        if(flag){
            System.out.println(c);
        }else {
            System.out.println("没有找到花花");
        }
        //删除花花二代 并输出信息
        //利用增强for循环
        //增强for循环的格式:
        //for(数据类型 变量名 :遍历的目标){ //数据类型 变量名:声明一个变量用来接收遍历目标遍历后的元素
        /*for(Cat cat:set){
            if(cat.getName().equals("花花")){
                //此操作只能删除最后一个元素,否者会进行报错,因为Set集合不允许一边遍历一边删除
                set.remove(cat);break;
                //需添加break结束循环
            }
        }*/
        //把年龄小于5的猫猫全部删除
        System.out.println("***************");
        System.out.println("删除年龄小于5的猫");
        Set set01 = new HashSet();
        for(Cat cat:set){
            if(cat.getMonth()<5){
                set01.add(cat);
            }
        }
        set.removeAll(set01);
        for(Cat cat:set){
            System.out.println(cat);
        }
        //删除所有猫的信息
        System.out.println("*************");
        boolean flag1 = set.removeAll(set);
        if(flag1){
            System.out.println("猫猫全部删除了");
        }else {
            System.out.println("猫还在");
        }

        }


    }


以上是关于集合——Set的主要内容,如果未能解决你的问题,请参考以下文章

peptide map DDA和IMS有啥区别

金蝶handler中 collection 代码片段理解

Alfred常见使用

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

比较 C# 中的字符串片段并从集合中删除项目

Python_Set集合