栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中的集合(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的集合(二)

2、Set接口

Set接口以散列形式存储数据,所以元素没有顺序,可以存储一组无序,唯一的对象;

Set的常用子接口有HashSet、linkedHashSet、TreeSet。

2.1HashSet

HashSet存储一组无序,且唯一的对象,这里的无序是指元素的存储数据和遍历数据不一致。

public class LearnHashSet {
    public static void main(String[] args) {
        HashSet hashSet = new HashSet();
        hashSet.add("Hello");
        hashSet.add("Mysql");
        hashSet.add("Hello");
        hashSet.add("HTML");
        hashSet.add("JavaSE");
        System.out.println(hashSet);
        System.out.println(hashSet.size());
        System.out.println("遍历HashSet");
        Iterator iterator = hashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next()+",");
        }
        hashSet.remove("Hello");
        System.out.println("删除之后遍历HashSet");
        iterator = hashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next()+",");
        }
    }
}

运行结果 2.2linkedHashSet

linkedHashSet存储一组有序,且唯一的对象(这里的有序是指,存储顺序和遍历顺序相同)

public class LearnlinkedHashSet {
    public static void main(String[] args) {
        linkedHashSet linkedHashSet = new linkedHashSet();
        linkedHashSet.add(new A(1));
        linkedHashSet.add(new A(1));
        Iterator iterator = linkedHashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next()+",");
        }
    }
}
class A{
    private int num;
    public A(int num){
        this.num = num;
    }

    @Override
    public boolean equals(Object o) {
    return true;
    }

    @Override
    public int hashCode() {
        return 1;
    }

    @Override
    public String toString() {
        return "A{" +
                "num=" + num +
                '}';
    }
}

==比较的是两个对象的内存地址;如果要判断内容相等,首先我们需要判断两个对象的hashCode相等,hashCode简单来说是将对象的内部信息如内存地址,属性值的等转换为一个散列值,这个散列值就是hashCode。

两个对象的hashCode相等这两个对象可能还不相等,但是两个对象的hashCode不相等,那么这两个对象一定不相等。

所以集合在两个对象是否相等的时候,先判断两个对象的hashCode是否相等,如果相等在用equals()进行进一步判断,这样能够减少equals方法的调用可以提高效率。

运行结果

 2.2TreeSet

除了linkedHashSet中可以存放有序元素外,TreeSet中也能存放有序数据,但它的有序是根据内部集合自动给所有元素升序排列,遍历时也会按照升序的顺序遍历。

 

public class LearnTreeSet {
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet();
        treeSet.add(new B(4));
        treeSet.add(new B(6));
        treeSet.add(new B(1));
        treeSet.add(new B(3));
        treeSet.add(new B(2));
        treeSet.add(new B(12));
        treeSet.add(new B(5));
        treeSet.add(new B(1));
        System.out.println(treeSet);
        System.out.println("长度:"+treeSet.size());
        System.out.println("遍历");
        Iterator iterator = treeSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next()+",");
        }
        System.out.println("=================");


    }
}
class B implements Comparable{
    private int num;
    public B(int num){
        this.num = num;
    }


    @Override
    public int compareTo(Object o) {
        
        B b = (B) o;
        if (this.num > b.num){
            return 1;
        }else if(this.num == b.num){
            return 0;
        }else {
            return -1;
        }
    }

    @Override
    public String toString() {
        return "B{" +
                "num=" + num +
                '}';
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/719585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号