collection集合接口子类---set接口

collection集合接口子类---set接口
    set接口需要掌握的内容:
        set接口的特点和list接口的区别
        HashSet实现类的使用
            增删改查
        TreeSet实现类的使用
        集合的遍历
        for增强循环和iterator方法
        
---------------------------------------------------------------
    set接口的特点:
        set接口的集合类元素不可中复,继承了collection的方法,没有额外方法。
        set是有序的,所以有增、删、查方法,没有修改方法,只能查找找到之后删除再添加,list可以修改。
        三个实现方法:Hashset,TreeSet,LinkHashSet
----------------------------------------------------------------
    HashSet实现类
        特点:散列表,无序的。
        HashSet存对象原理:
            根据每个对象的哈希码值(调用hashCode()获得)用固定的算法算出它的存储索引,把对象存放在一个叫散列表的相应位置(表元)中:
            如果对应的位置没有其它元素,就只需要直接存入。
            如果该位置有元素了,会将新对象跟该位置的所有对象进行比较(调用equals()),以查看是否已经存在了:还不存在就存放,已经存在就放弃加入。
        取对象时:
            根据对象的哈希码值计算出它的存储索引,在散列表的相应位置(表元)上的元素间进行少量的比较操作就可以找出它。
        Set接口存、取、删对象都有很高的效率。
    使用HashSet注意:
        向HashSet中添加元素时,系统为保证不重复,先比较hashCode( ) ,如果相同,再比较equals(),如果还相同,则认为是同一个对象,不再加入,add(...)返回false,[Demo]
        要存入HashSet集合的自定义类型的对象通常需要重写hashCode()和equals()方法。
        同一个对象的hash值一定相同,同一个hash值不一定是同一个对象,甚至可能是不同类的对象。
    迭代器 iterator的使用
        Iterator<e> i=set.iterator//返回一个boolean值
        while(i.hasNext()){//判断i调用hasNext()方法的值
            e s=i.next();
        }
-----------------------------------------------------------------------------
    TreeSet实现类
        需掌握:增,删,查,自定义比较器(comparator)
        特点:有序排列,安照自然顺序排列
        添加原理:
            TreeSet使用红黑树结构对加入的元素进行排序存放,输出时也会按排序后的顺序, 所以放入TreeSet中元素必须是”可排序的”。
            加入TreeSet集合中的javabean类本身要实现Comparable ['kɑmpərəbl]接口
            自定义一个实现Comparator['kɑmpə,retɚ]接口的比较器实现类,在创建TreeSet对象时,将自定义比较器传入构造方法
            如果加入的类”不可比较”,则add()方法在运行时会报错
        自定义比较器:
            class Teacher implements Comparable<Teacher>{    //注意范型,不写泛型会用影响
                @Override
                public int compareTo(Teacher o) {            //注意比较的类
                    //int num = this.age-o.age;
                                                            //怎样把一个int型转成其对应的包装类
                    int num = Integer.valueOf(this.age).compareTo(Integer.valueOf(o.age));
                                                            //当主要条件相同时,需要比较次要条件
                    if(num==0){
                        num = Integer.valueOf(this.salary).compareTo(Integer.valueOf(o.salary));
                    }
                    if(num==0){
                        num = this.name.compareTo(o.name);
                    }
                    return num;
                }                
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值