1.Collection和Collections的区别
Collection是一个集合接口,提供了对集合对象进行基本操作的通用接口方法
Collections是集合类的一个工具类,提供了一系列静态方法,用于对集合中元素进行排序,搜索以及线程安全等各种操作
2.JAVA容器都有哪些
List:Vector,ArrayList,LinkedList,CopyOnWriteArrayList
Queue:PriorityQueue
Set:HashSet,TreeSet
Map:HashMap,TreeMap,ConcurrentHashMap
3.常见数据结构的原理
List篇:
Vector:内部通过数组实现,支持线程的同步,某一时刻只能有一个线程能够写Vector,因此它是线程安全的,但访问慢
ArrayList:最常用的List实现类,内部通过数组实现,默认大小为10,当数组大小不足时会触发扩容机制,通过Arraylist.ensureCapacity()扩容出新数组,新数组大概在原数组大小的1.5倍左右,然后会通过Array.copyOf()方法将原数组内容拷贝过去
LinkedList:用双向链表储存数据,适合数据的动态插入和删除,访问数据很慢(时间复杂度O(n)),适合写多读少的场景
CopyOnWriteArrayList:写时复制,当加入元素时不会直接在原数组操作,而是新复制一份数组,在新数组进行操作,再将原数组指向新数组,因此是线程安全的,但是每次写入都会复制数组,开销比较大,建议对需添加的元素累计后批量加入
Queue篇:队列是先进先出的数据结构,只允许在表的一端进行获取操作,另一端进行插入操作,此FIFO特性和阻塞特点常用于作为Buffer(缓冲区)
Map篇:
HashMap:内部通过数组+链表+红黑树(JDK8之后)