java之 ArrayList详解

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.csdn.net/weixin_42410658/article/details/103828427

【>> 1 除以2 << 1 乘以2 表达式10<<3+1的值 是?】

  1. 因为加法运算优先级高于左移运算,所以这copy个式子先计算3+1=4,接着运算 10<<4
  2. 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());
    }

}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值