1.Java基础
(1)hashmap
底层数据结构是数组+单向链表
-》put方法:有返回值,返回的是原来存在的值,没有就返回null,使用它会新增数据,有就返回原来存在的值,并用新数据覆盖旧数据
-》replace方法:原来没有值就不修改,有数据才将其修改
-》key-value:一个key对应一个value,通过key来查找value
(2)hashtable与hashmap区别
-》继承父类不同
-》底层结构容量不同,默认hashmap(16),hashtable(11)
-》hashmap的k、v都可以为null,但是hashtable不可以
-》hashmap数据定位采用hash算法,hashtable采用hashcode
-》hashmap性能更好
(3)迭代器
用于迭代数据
hashmap一旦循环遍历,若要修改数据,要采用迭代器
(4)集合的索引范围
对于集合元素为数组的,索引范围为0~数组长度-1
对于集合元素为List的,索引范围为0~数据长度-1
(5)数据流
数据流转的通道不止一个,此外每个管道也不一样,有粗有细
2.算法
(1)移除元素
暴力方法:
第一个for循环(i)找到要删除的元素
第二个for循环(j)更新数据,把i后面的数据全部往前移动
更新数据后,要把数据长度size--,同时也要将i指针--
双指针法(快慢指针):
2个指针,1个for
fast:寻找新数组的元素
slow:指向更新数组下标的位置
if(nums【fast】!=val){
nums【slow++】=nums【fast】;
}
(2)删除有序数组的重复项
双指针法:
fast,slow从索引1开始
比较当前fast和上一个fast(fast-1)的值
if(nums【fast】!=nums【fast-1】){
nums【slow++】=nums【fast】;
}
(3)移动元素0到数组的末尾
暴力方法:
新建一个大小一样的数组arr
把原数组nums的非零元素存到arr中
再把arr的元素复制到原数组nums