1、哈希碰撞:已经被占导致的冲突。
2、红黑树是一种自平衡的二叉查找树,是要比较大小进行插入的。
在Java中一些自定义的对象怎么比较大小呢?
①首先相应的类实现Comparable接口;
②然后重写接口的compareTo方法指定比较哪些属性就可以了。
关于compareTo方法的细节:
@Overridepublic int compareTo(Student o) {return this.getAge() - o.getAge();}
- this 是指当前添加的对象,o 是指比较大小的对象。
- 当 <0 时存左边;
- 当 >0 时存右边;
- 当 =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方法快速判断属性值是否相同。