集合有关细节

1、哈希碰撞:已经被占导致的冲突。

2、红黑树是一种自平衡的二叉查找树,是要比较大小进行插入的。

在Java中一些自定义的对象怎么比较大小呢?

①首先相应的类实现Comparable接口;

②然后重写接口的compareTo方法指定比较哪些属性就可以了,比如年龄等等。

关于compareTo方法的细节:

@Override
    public int compareTo(Student o) {
        return this.getAge() - o.getAge();
    }
  1. this 是指当前添加的元素,o 是指要比较大小的元素,根据return的结果决定添加的元素存哪边。 
  2. 当 <0 时添加的元素存左边;
  3. 当 >0 时添加的元素存右边;
  4. 当 =0 时不存;

只关注小的减大的,至于哪个是小,哪个是大,就需要按照升序还是降序来写了。

当小的是添加的对象,大的是比较的对象,便可实现升序排列。

而当小的是比较的对象,大的是添加的对象,return的值<0,添加的元素存左边,实现降序排列。

一些基本数据类型的包装类以及String类都实现了相应的比较规则,比如String中按照字符在ASCII码表中的数字大小进行比较的,具体规则如下:

①首先比较首字母的大小,如果相同则再比较第二个字母,依此类推,直到能比较出大小。

②但是有时候不想用别人提供的这种默认的,想用别的比较规则,应该怎么实现呢?在创建TreeMap对象的时候利用匿名内部类传递Comparator接口实现类的对象,并实现compare方法。

3、contains方法

依据什么来判断两个对象就是同一个,底层其实是利用equals方法进行判断,默认是比较内存地址,但是有时候不想这样,就可以重写equals方法,按照想比较的进行判断,比如有时候id相同是同一个对象,有时候姓名相同是同一个对象。

4、集合中的操作:增删改查,遍历。

5、hasnext:判断当前位置是否有元素,怎么实现的?因为集合中有一个成员变量size,用来表示存了多少个,将用来指向遍历到第几个元素的游标与size进行比较。

6、哈希表如何实现快速查找的?

因为直接将键和存的地址关联起来了。当知道键时就可以直接去取了,基本不用遍历。

7、避免在循环中使用两次next

因为当第一个next已经遍历到最后一个元素时,cursor+1之后大于size,当此时再次使用next会报NoSuchElement异常,因为集合中根本没有元素可取了。

8、hasnext用来遍历的游标指针不会复位,当想要再次遍历时,只能再获取一个新的迭代器对象。

9、Lambda表达式:参数类型可以省略,只有一个参数时括号可以省略,方法体只有一行时大括号可以省略,return可以省略,分号可以省略。

10、HashMap我觉得算是两次哈希运算吧。

11、HashMap为什么重写hashCode和equals方法?

因为是用属性计算的hashCode,当哈希值相同时,判断是否是同一个键则使用equals方法快速判断属性值是否相同。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值