1. Set和Map都是用来查询的用的,增加 删除 包含 速度都非常的快,因为他们存放的时候进行了优化。比如HashMap就是以hash算法来存放,TreeMap就是以二叉树进行存储。而对应的HashSet的底层实现是HashMap的key的部分,TreeSet的底层实现TreeMap的key的部分。
2. 如果是自己的类,往HashSet里面放的话,就要重写hashcode方法和equals的方法,因为你自己的类,都是继承Object的hashcode和equals方法。
3. 看看HashMap的的存储方式,数组加单向链表。
3.1 当我们put(key, value)
3.2 拿key的hashcode()计算出数组上的位置
3.3 看数组上的这个位置有没有元素,如果没有就直接放在数组里面
3.4 如果有的话,就拿key用equals链表上所有的元素key,如果相同就把老的value替换,如果不等话就放到链表的第一位置,放在第一个位置,而不是放到最后一个位置的原因是因为遵循最近使用的肯定很快又会得到使用。
3.5 原生类型的包装类和String都实现了自己的hashcode和equals方法。
4. TreeMap的存储方式二叉树
4.1 put(key, value)
4.2 放进的每个key都要实现Comparable接口或者是在new TreeMap(Comparator) 时就传入比较器实现了Comparator接口的类。
4.3 要放到树上,肯定是需要key进行比较,所有就有4,2的步骤。
4.4 原生类型的包装类和String都实现了Comparable接口。