Set Map collection

老夫掐指一算,又到了写博客的时间
首先怀念一下我的老师,他可能在教我们2次就离开了我们,真是一个悲伤的故事。
废话不多说,开整。
在这里插入图片描述
通过上次的学习
我们学习了collection中list 的集合
今天我们来看看set接口中各种子类的特点
由于set接口继承着collection 类,所以方法我们就不一一介绍了 同collection一样有很多增删改查的方法
具体可以参照API文档。
——————————————————————————————————————————————————————
在Hashset里面 需要注意几点
1、无序,它的存储和取出的顺序不一致这点需要注意
2、唯一,它里面的元素不能重复

那么这个时候问题就来了,为什么hashset能做到这些?
答:hashset底层数据结构为哈希表,线程不安全
当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,
然后根据 hashCode 值决定该对象在 HashSet 中的存储位置。
结论:HashSet 保证元素唯一性是靠元素重写hashCode()和equals()方法来保证的,如果不重写则无法保证。

所以我们在存储自定义对象时,我们需要重写hashcode和equals 方法来保证hashcode元素存储的唯一性

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }

这既是重写过程

接下来我们说一下 LinkedHashSet
这个和HashSet的区别并没有多少
区别1:数据结构 有两个 链表和哈希表
所以保证了元素的有序和唯一(哈希表保证有序,链表保证唯一)

最后一个TreeSet
这个比较重要了
首先它的集合特点是元素唯一,并且可以对元素进行排序
但是排序有两种方法
一是自然排序
二是比较器排序
接下来是图示怎么排序自定义类
自然排序
在这里插入图片描述
这里即为以年龄先进行排序在若年龄相同则按照 姓名进行排序
在自然排序中我们需要将自定义类导入compareTo接口,然后将我们想要的排序顺序写好
比较器排序(采用匿名内部类形式)
在这里插入图片描述
形式上和自然排序差不多
不需要太多的解释
在注意一点,treeset的底层结构多了二叉树(红黑树),用于排序

——————————————————————————————————————————————————
关于collection集合我们就说完了
collection无论如何都是单链
接下来我们要说的是双链集合 map
同样map也是个接口

Map集合的数据结构只和键有关

在这里插入图片描述

Map和collection是两个不同的几口所以我们用思维导图来描述一下Map里面的各种方法
在这里插入图片描述
在双链中,若检测往相同键上添加元素则会替代原有元素,这就是为什么添加中包含着替代
接下来我们用上述方法来遍历map集合
遍历有两种方式

hashmap是无序的

我们图示
在这里插入图片描述

Set<java.util.Map.Entry<Integer, Integer>> entries = Map.entrySet();
        for (java.util.Map.Entry<Integer, Integer> entry : entries) {
            Integer key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+"\t"+value);

        }

第一种使用entryset方法 构造一个键与值的集合 遍历这个集合再用getkey和getvalue方法进行遍历
在这里插入图片描述

Set<Integer> keySet = Map.keySet();
        for (Integer i : keySet) {

            Integer integer = Map.get(i);
            System.out.println(i+"\t"+integer);
        }

    }
}

第二种利用键找值的思想,通过创建键集 在进行遍历找值的思想
2种都挺好用
注意,在hashmap中可以存入空指针null也就是null键和null值
PS:只要不怕空指针异常

当遍历自定义类(键)时也要重写hashcode方法和equals方法

下来我们说一下linkedhashmap
和hashmap差不多
只不过linkedhashmap不能存入空指针
LinkedHashMap的特点: 底层的数据结构是链表和哈希表 元素有序 并且唯一
元素的有序性由链表数据结构保证 唯一性由 哈希表数据结构保证

接下来我们在着重强调一下treemap
再有了treeset的基础上
treemap也是大同小异
treemap不能插入null键null值
TreeMap: 键的数据结构是红黑树,可保证键的排序和唯一性
排序分为自然排序和比较器排序
线程是不安全的效率比较高
在collection与map集合中会发生相互嵌套的现象 望周知

今天的最后一个内容collections工具类
也算是比较方便的工具类
用来编写集合很方便
在这里插入图片描述

以上就是全部内容。
Ps.天气转凉,加衣喝热水

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值