ArrayList和LinkedList的底层原理,动态扩容,hashMap的底层原理,动态扩容
1.ArrayList底层是基于数据的,对于查询可以快速的定位到元素,对于插入和删除需要数据移动性能较差(底层基于数组,动态扩容)
2.LinkedList底层是基于链表的,对于查询需要遍历链表,性能较差,对于插入和删除只需要修改指针指向即可。
HashMap1.7底层结构是:数组+链表
1.8底层结构是:数组+链表+红黑树,当链表长度达到8时,变成红黑树
HashMap和HashTable的区别:
由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
1)key和value的取值范围不同
HashMap和HashTable都是基于哈希表来实现键值映射的工具类,底层都是哈希表结构。
HashMap允许键为null,值为null,对于HashMap如果使用get方法返回null,并不能表明HashMap不存在这个key,有可能是键对应的值为null。
HashTable则不允许null键和null值。
2)HashMap是非synchronized的,而HashTable是synchronized的。
HashMap和TreeMap的区别:
1)HashMap和TreeMap(TreeMap:基于红黑树实现的,红黑树总是处于平衡的状态)的区别:
HashMap是通过hashcode()对其内容进行快速查找,hashmap中的数据是没有顺序的。
TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用treemap。
2)HashMap和TreeMap都是线程不安全的。
3)HashMap:适用于Map插入,删除,定位元素;
TreeMap:适用于按自然顺序或自定义顺序遍历键(key);
4)总结
HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。