我们使用的数组和集合有啥区别?
1.集合可以操作数量不确定的一类数据,空间不足时会自动扩容.
2.数组时大小固定的一类数据.(基本类型/引用类型)
toArray()和Array.asList()可以互相转化.
集合:
1.collection接口
collection是最基本的集合接口,一个collection代表一组Object,即collection的元素.
遍历collection:迭代器iterator
Iterator it=collection.iterator();
while(it.hasNext()){
Object obj=it.next;
}
派生的两个子接口:list和set
list:有序的,有重复元素,和数组类似可以动态增长.查询速度快,增加或删除元素效率低,因为需要移动其他元素.
LinkList:链表,堆栈,队列
ArrayList:动态数组
set:无序的,不可以重复的,查询速度慢,增加和删除元素效率高.
hashset:以哈希表的形式存储数据.
2.map不重复的键值对映射
Map.Entry接口:map的entrySet()方法返回一个实现map.entry接口的对象集合.
HashTable,HashMap,ConcurrentHashMap的区别.
1.hashTable
1,底层结构是数组加链表,无论是key和value都不能为null.
2.线程安全,每次操作数据的时候会锁住整个HashTable,效率低
3.初始size为11,扩容:size*2+1.
.
2.ConcurrentHashMap
1.底层 数组+单向链表+红黑树
2.线程安全,每次操作数据只锁住一个桶,效率高
3.hashMap
1.底层接口:数组+链表+红黑树
2.线程不安全.
3.可以存储null值或key为null
4.初始size为16,每次扩容大小为size*2.
扩容在多线程情况下:1.7头插法会造成死循环和数据丢失.1.8解决了这两个问题但有数据覆盖的问题(哈希碰撞造成).
5.负载因子为0.75
红黑树
它不是完全平衡的二叉树,但能保证搜索操作在O(log n)的时间复杂度内完成.
特点:
1.根节点为黑色.
2.每个节点不是黑色就是红色.
3.每个子节点为黑色.
4.如果节点为红色,那它的子节点是黑色
5.从一个节点到其子节点的所有路径上包含相同的黑节点.