【20230509】list/set/迭代器/比较器/(==/equals/hashcode)区别

Summary:  list/set/迭代器/比较器/(==/equals/hashcode)区别

* 集合:collection *

1、子接口: List

  List 特征:维护有序的,可重复的集合。

  List的实现类: ArrayList  LinkedList  Vector

  ArrayList 底层是一个可扩容的数组.拥有下标(索引),从零开始。
  LinkedList 底层是:双向链表,插入删除速度快,检索速度慢。
  Vector  是一个线程安全的集合。
2、子接口:Set

   Set 特征: 维护着无序的,不可重复的集合。

   Set存储元素使用的是散列表存储。当散列表中存在已有对象,首先判断hashCode是否相同,
   如果不同,直接存入。如果相同再判断equals方法,如果equals方法为false则存入,如果为
   ture,则不存入。(==/equals/hashcode不同)

   HashSet  使用散列表存储元素。
   linkedHashSet 使用散列表存储元素,在元素中添加了双向链表,从而能记录对象的前后顺序。
   TreeSet维护科技型排序的元素的集合。使用Comparator接口的实现类进行排序(不然是默认的按数字或者字母进行排序)。

# 迭代器iterator获取set内的元素的两种写法:
    1 Iterator var3 = logs.iterator();(用的多)
                while(var3.hasNext()){
                  Log r1 = (Log)var3.next();
                  System.out.println(r1);
                }
    2 Iterator<Log> iterator = logs.iterator();
                while(iterator.hasNext()){
                  System.out.println((Log)iterator.next());
                  }

#  ==/equals/hashcode  不同 

  1. ==: 基本数据类型引用的是值。引用类型数据,比较的是内存地址,有可能内容一样,但内存地址不一样。
  2. .equals: 比较引用类型的的属性,eg.字符串的内容。如果重写了方法,比较的则是其内存地址。
  3. hashCode:内存地址转为Int,并返回值(哈希码/散列码),能更好确定对象在哈希表中索引位置。
  4. 其他:对象不同但哈希码可能相同(哈希冲突),因此再用.equals判断是否绝对相等。但两个完全相同的对象(内存地址指向同一个),那hashcode一定相同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值