ArrayList集合
(一) 创建ArrayList :
List<String> list=new ArryList<>();
(二) ArrayList集合操作
- 修改指定元素列表位置的元素值 set(int index,Object element)
- Random Access 时间复杂度:O(1)
- 添加元素:list.add(e) 时间复杂度O(1)
- 删除元素:list.remove(index) 时间复杂度O(n)
- 获取元素:list.get(index) 时间复杂度O(1)
- set(int index,Object element) 时间复杂度O(1)
- 集合长度list.size()
ArrayList-resize 自动扩容机制
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
oldCapacity=10;
ArrayList初始容量为10
newCapacity=10+5=15;
每超过一次容量自动扩容至当前容量的1.5倍,不满1的舍去
比如:如初始容量为20时扩容为:20=> 30 => 45 => 67…
扩容机制参考于:【如有侵权请联系删除】
https://blog.youkuaiyun.com/weixin_42410658/article/details/103828427
【>> 1 除以2 << 1 乘以2 表达式10<<3+1的值 是?】
- 因为加法运算优先级高于左移运算,所以这copy个式子先计算3+1=4,接着运算 10<<4
- 10 的二进制是 1010,左移四位后是 10100000,转换回十进制后为 160。(也可以这样算, 左移一位等于乘以2,所以10<<4就是 102222,结果就是160)
题目:给一个已排序的数据集合,集合元素的范围被包含在范围[lower,upper],返回集合元素缺少元素的范围, 例如:[0,1,3,50,75],lower = 0 and upper = 99,返回[“2”,“4->49”,“51->74”,“76->99”]
public class QuestionMissingRanges {
private static List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> res=new ArrayList<>();
//1.判断是否为有效值
if(nums.length==0||nums==null){
res.add(lower+"->"+upper);
return res;
}
//如果lower等于upper返回空值
if (lower==upper){
return res;
}
//2.获取MissingRanges
//2.1 添加lower之后的值
addToList(res,lower,nums[0]-1);
//2.2添加从lower到upper之间的值
int prev=nums[0];//左边界
int i=1;
while(i< nums.length){
int cur=nums[i];//右边界
if (cur!=prev+1){//后一项不等于前一项,将该范围存入list集合
addToList(res,prev+1,cur-1);//左加右减
}
prev=cur;//将左边界重定向至右边界处继续重复操作
i++;
}
//2.3添加upper之前的值
addToList(res,nums[nums.length-1]+1,upper);
return res;
}
private static void addToList(List<String> res, int start, int end) {
//1.左边界等于右边界(没有箭头)
if (start==end){
//将 integer 变量 start 转换成字符串
res.add(String.valueOf(start));
}else if (start<end){ //如果lower等于nums[0],start>end==>[0>-1]
res.add(start+"->"+end);
}
//2.左边界不等于右边界(添加箭头)
}
//快捷键 psvm
public static void main(String[] args) {
int[] nums={0,2,2,50,75};
int lower=0;
int upper=99;
List<String> rst=findMissingRanges(nums,lower,upper);
//toString() 方法用于返回以一个字符串表示的 Number 对象值。
System.out.println(rst.toString());
}
}