Java基础2-HashMap和TreeMap
HashMap
HashMap底层是一个数组,数组中每个元素是一个单链表(采用拉链法解决哈希冲突)。
JDK8之后,对HashMap底层数据结构(单链表)进行了改进
1.如果单链表元素超过8个,则将单链表转变为红黑树;
2.如果红黑树节点小于6时,再将红黑树变为单链表
这种方式也是为了提高检索效率,二叉树的检索会再次缩小扫描范围,提高效率。
HashMap 是数组和单链表的结合体
1、数组查询效率高,但是增删元素效率较低
2、单链表在随机增删元素方面效率较高,但是查询效率较低
3、HashMap将二者结合起来,充分利用它们各自的优点
注:放在HashMap中key的元素(或者放在HashSet中的元素)需要同时重写hashCode()和equals()方法!!
TreeMap(可排序)
TreeSet/TreeMap是自平衡二叉树
TreeSet/TreeMap迭代器采用的是中序遍历方式
TreeSet/TreeMap中key可以自动对String类型或8大基本类型的包装类型进行排序,但无法直接对自定义的类型进行排序
方法:可以选择TreeSet/TreeMap带比较器参数的构造器,并重写比较器中的compare方法
static class Cat{
int age;
public Cat(int age){
this.age = age;
}
}
public static void main(String[] args) {
Set<Cat> set = new TreeSet<>(new Comparator<Cat>() {
@Override
public int compare(Cat o1, Cat o2) {
return 0;
}
});
set.add(new Cat(1));
set.add(new Cat(2));
set.add(new Cat(3));
}

浙公网安备 33010602011771号