🍊Java集合包 一些性质和问题总结
框架
框架
- Collection
1. ListArraylist:数组(查询快,增删慢 线程不安全,效率高 )
Vector:数组(查询快,增删慢 线程安全,效率低 )
LinkedList:链表(查询慢,增删快 线程不安全,效率高 )
2. SetHashSet(无序,唯一):哈希表或者叫散列集(hash table)
LinkedHashSet:链表和哈希表组成 。 由链表保证元素的排序 , 由哈希表证元素的唯一性
TreeSet(有序,唯一):红黑树(自平衡的排序二叉树。)
- MapHashMap:基于哈希表的Map接口实现(哈希表对键进行散列,Map结构即映射表存放键值对)
LinkedHashMap:HashMap 的基础上加上了链表数据结构
HashTable:哈希表
TreeMap:红黑树(自平衡的排序二叉树)
HashMap和HashSet区别
a. HashMap实现了Map接口,HashSet实现了Set接口
b.HashMap存储键值对,HashSet存储对象
c.HashMap调用put()向map中添加元素,HashSet调用add()像set中添加元素
d.HashMap使用Key计算hashcode,HashMap使用成员计算Hashcode
HashMap和HashTable有何不同
(1)HashMap同意key和value为null。而HashTable不同意。
(2)HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境。
(3)在Java1.4中引入了LinkedHashMap,HashMap的一个子类,假如你想要遍历顺序,你非常easy从HashMap转向LinkedHashMap,可是HashTable不是这种。它的顺序是不可预知的。
(4)HashMap提供对key的Set进行遍历。因此它是fail-fast的。但HashTable提供对key的Enumeration进行遍历,它不支持fail-fast。
(5)HashTable被觉得是个遗留的类。假设你寻求在迭代的时候改动Map,你应该使用CocurrentHashMap。
ArrayList和Vector有何异同点
1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
ArrayList 扩容
首先,定义默认初始容量,为10
扩容方法:>>位运算,右移动一位。 容量相当于扩大了1.5倍;