Java基础知识
String StringBuffer与StringBulider的区别
- 执行速度
StringBuilder > StringBuffer > String
当我们对一个String字符串进行频繁的增删改时,虚拟机会频繁的在常量池里面寻找和创建字符串,影响速度,使用StringBuilder或者StringBuffer则保证只有一个对象,虚拟机不会创建额外的对象.
- 线程安全
StringBuilder是线程不安全的,而StringBuffer是线程安全的
总结
- String:适用于少量的字符串操作的情况
- StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
- StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
集合List、Set、Map
- Set:无序、不可重复
- HashSet:底层数据结构是哈希表(无序唯一),hashCode()和equals()保证元素唯一性
- LinkedHashSet:底层数据结构是链表(有序)和哈希表(唯一)。(FIFO插入有序,唯一)
- TreeSet:底层数据结构是红黑树。(唯一,有序)(自然排序、比较器排序、根据比较的返回值是否为0来保证元素的唯一性)
- List:有序可重复
- ArrayList:底层数据结构是数组,查询快,增删慢.线程不安全,效率高。
- Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低
- LinkedList:底层数据结构是链表,查询慢,增删快。线程不安全,效率高
- Queue:队列集合
- Map:映射关系的集合
- TreeMap:有序
- HashTable:无序;线程安全,效率低;不允许null
- HashMap:无序,不是线程安全,效率高;key和value都允许null
Collection集合使用原则
唯一 -> set ->排序->TreeSet或LinkedHashSet(不排序:HashSet)
不唯一 -> List ->安全 -> Vector(不安全:ArrayList或者LinkedList)