- Hashmap的结构,jdk1.7和jdk1.8有哪些区别
- 存储结构
jdk1.7:数组,单链表
jdk1.8:数组,单链表,红黑树 - 转移数据方式
jdk1.7:链表头插,先扩容再插入(put)数据
jdk1.8:链表尾插,先插入(put)数据再扩容,当链表节点大于8的时候,会变成红黑树结构。如果节点又少于6的时候,会变成链表结构。因为链表太长查询数据会很慢,所以使用红黑树结构。
数组查询效率快,链表插入,修改效率快。
- ArrayList和Linkedist的区别
- ArrayList:底层数组结构,原理:数据复制。自动扩容数组,每次扩容上次的1/2.原基础的1.5倍。
利用index按顺序存储,查询效率高。 - Linkedist:底层链表结构,善于插入,删除数据。
总结ArrayList更适合读取数据,Linkedist善于插入删除数据。
- String,StringBuffer,StringBuilder的区别
- 可变不可变
String字符串是常量,在修改时不会改变自身。会重新创建一个字符串对象。
StringBuffer,StriingBuilder:在修改时会改变对象自身,每次操作都是对对象本身进行修改,并不会生成新的对象。 - 线程是否安全
String:对象定义后不可变,线程安全。
StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串。
StringBuilder:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。
HashMap和Hashtable的区别
HashMap | Hashtable |
---|
(key,value)可以为null值 | (key,value)不可以为null值 |
线程不安全(推荐单线程使用) | 线程安全(推荐多线程使用) |
JDK1.2版本出现的 | JDK1.0版本出现的 |
- 相同点都是一个键对应一个值
- 都是键不能重复,但是值可以重复
HashMap和HashSet的区别
HashMap | HashSet |
---|
实现了Map接口 | 实现了Set接口 |
存储的value值可以重复 | 存储的对象不能重复 |
存储键值对(key,value) | 仅仅存储对象 |
使用put()方法将元素放入map中 | 使用add()方法将元素放入set中 |
HashMap获取值比较快 | HashSet较HashMap来说比较慢 |
HashMap和TreeMap的区别
HashMap | TreeMap |
---|
数组+单向链表+红黑树 | 红黑树 |
默认数组长度16,链表转红黑树:8,红黑树转链表:6 | 没有范围控制 |
(key,value)可以为null | key不能为null,value可以为null |
HashMap比TreeMap快一点,建议多使用HashMap。在需要排序Map的适合适合TreeMap