HashMap和HashTable之间的区别
HashMap是线程不安全的,HashTable中的每个方法都是synchronized
修饰的,所以是安全的
HashMap的效率高点(线程安全的带来的影响)
HashMap中只允许有一个key为Null,value可以有多个为Null
HashTable中不可以有控制
HashMap初始时容量大小是16,每次扩容都是之前的两倍
HashTable初始容量是11,每次扩容都是2n+1,
如果给了容量初始值,HashTable直接给最大的容量值,HashMap给的是2的幂
HashSet和HashMap的区别
HashMap是存放键值对的,put方法添加键值对
HashSet是存放对象的,add方法添加对象的
HashMap是通过健来找到hash值的,HashSet是通过对象来算出来hashcode的,所以容易哈希碰撞,所以需要equals判断
HashSet的插入
插入时,会看所在的位置上有没有对象,或者别的对象有没有相同的hashcode,没有的话,直接插入成功,有的话,就会equals比较一下,不同的话插入成功,反之不插入
扰动函数:为了防止一些简单的哈希函数,防止发生过多的哈希碰撞
Collection工具类
排序操作
反转:void reverse(List list)
随机排序:void shuffle(LIst list)
自然排序升序:void sort(List list)
定制排序:void sort(List list, Comparator c)
交换指定位置的值:void swap(List list, int i, int j)
旋转,正数时,后distance个数整体移动到前面;负数时,前diantance个数整体移到后面:rotate(List list, diatance d)
查找,替换操作
二分查找(有序List):int binarySerach(List list, Object o)
返回最大值(自然排序):int max(Collection coll)
根据定制排序,返回最大值:int max(Collection coll, Comparator c)
指定元素替换所有元素:void fill(List list, Object o)
统计元素出现次数:int frequence(Collection coll, Object o)
指定元素第一次出现的位置:int indexOfSubList(List list, List targrt)
指定元素最后一次出现的位置:int indexOfLastList(LIst list, List target)
新元素替换所有元素:boolean replace(List list, Object oldVal, Object new Val)