Java集合概述(二)

关系图(引用别人的图,觉得特别好,就放这了)

上篇简单概述了一下Java集合框架以及List集合和它的几个实现类

本文接着上文来进行

Set(跟 List 一样,Set 是 Collection 的子接口,Set 集合是以散列的形式存储数据,所以元素是没有顺序的,可以存储一组无序且唯一的数据。)

Set 常用实现类:

1. HashSet (可以存储一组无序且唯一的元素)

测试加实际应用

public class Test {

    public static void main(String[] args) {

        HashSet set = new HashSet();

        set.add("Hello");

        set.add("World");

        set.add("Java");

        set.add("Hello");

        Iterator iterator = set.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

        set.remove("World");

        System.out.println("****************");

        iterator = set.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

    }

}

2. LinkedHashSet(可以存储一组有序且唯一的元素)

测试加实际应用


import java.util.Iterator;

import java.util.LinkedHashSet;



public class Test {

    public static void main(String[] args) {

        LinkedHashSet linkedHashSet = new LinkedHashSet();

        linkedHashSet.add("Hello");

        linkedHashSet.add("World");

        linkedHashSet.add("Java");

        linkedHashSet.add("Hello");

        System.out.println("LinkedHashSet的长度是"+linkedHashSet.size());

        System.out.println("遍历LinkedHashSet");

        Iterator iterator = linkedHashSet.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

        linkedHashSet.remove("Java");

        System.out.println(linkedHashSet.contains("Java"));

    }

}

3. TreeSet

测试加实际应用

​import java.util.Iterator;

import java.util.TreeSet;



public class Test {

    public static void main(String[] args) {

        TreeSet treeSet = new TreeSet();

        treeSet.add(new Data(1));

        treeSet.add(new Data(3));

        treeSet.add(new Data(6));

        treeSet.add(new Data(2));

        treeSet.add(new Data(5));

        treeSet.add(new Data(4));

        treeSet.add(new Data(1));

        System.out.println("treeSet的长度"+treeSet.size());

        System.out.println("treeSet遍历");

        Iterator iterator = treeSet.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

    }

}



class Data implements Comparable{

    private int num;



    public Data(int num) {

        this.num = num;

    }



    /**

     * A.compareTo(B)

     * 返回值:

     * 1 表示A大于B

     * 0 表示A等于B

     * -1 表示A小于B

     * @param o

     * @return

     */

    @Override

    public int compareTo(Object o) {

        if(o instanceof Data){

            Data data = (Data) o;

            if(this.num < data.num){

                return 1;

            }else if(this.num == data.num){

                return 0;

            }else{

                return -1;

            }

        }

        return 0;

    }



    @Override

    public String toString() {

        return "Data{" +

                "num=" + num +

                '}';

    }

}




​

总结:

重点来了!!!:

1. LinkedHashSet 如何判断两个对象是否相等?

首先会判断两个对象的 hashCode 是否相等

什么是 hashCode?

将对象的内部信息(内存地址、属性值等),通过某种特定规则转换成一个散列值,就是该对象的 hashCode。

  • 两个不同对象的 hashCode 值可能相等。

  • hashCode 不相等的两个对象一定不是同一个对象。

集合在判断两个对象是否相等的时候,会先比较他们的 hashCode,如果 hashCode 不相等,则认为不是同一个对象,可以添加。

如果 hashCode 值相等,还不能认为两个对象是相等的,需要通过 equals 进行进一步的判断,equals 相等,则两个对象相等,否则两个对象不相等。

2 . LinkedHashSet 和 TreeSet 都是存储一组有序且唯一的数据,但是这里的两个有序是有区别的:

LinkedHashSet 的有序是指元素的存储顺序和遍历顺序是一致的。

TreeSet 的有序是指集合内部会自动对所有的元素按照升序进行排列,无论存入的顺序是什么,遍历的时候一定按照顺序输出。

欢迎志同道合的朋友关注公众号,我希望关注我的公众号不仅仅是关注,而是热爱编程,有求知的心理,遇到有什么问题可以留言。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值