ArrayList的使用和源码分析

1.基本数据类型和包装类

这里面包装类就是基本数据类型的首字母大写,除了Integer和Character。

在这里我们就介绍一下装箱和拆箱的意思。

装箱也叫装包:把简单类型变为包装类类型

拆箱也叫拆包:把包装类类型变为简单类型

举例:

public static void main(String[] args) {
        Integer a = 123;//装箱  装包
        int b = a;//拆箱  拆包(隐式的)
        System.out.println(a+" "+ b);
        System.out.println("================");
        //显式的装包
        Integer a2 = Integer.valueOf(123);
        Integer a3 = new Integer(123);

        //显式的拆包
        int b2 = a2.intValue();
        double d = a2.doubleValue();
    }

接下来我们来看一个例题:

那么为什么两个的结果不相同呢?

那么我们就来看看后台将int类型转化为Integer类型的valueOf方法的源码:

我们可以看到如果i>=low=-128值 或者 i<=high=127,就会返回一个值。

因为返回的是一个cache[ ]的数组,因此我们计算一下其取值范围:

因此只要是0到255之间的值,都是返回true,其他都是返回false。

2.List的使用

2.1尾插e

public static void main(String[] args) {
        List<String> list = new ArrayList<>(10);

        ArrayList<String> list2 = new ArrayList<>();
        list2.add("hello");
        list2.add("bit");
        list2.add("hehe");
        System.out.println(list2);
        //使用另外一个Arraylist对list3初始化,前后必须保持一样的类型
        ArrayList<String> list3 = new ArrayList<>(list2);
        list3.add("hanghang");
        System.out.println(list3);
    }

2.2打印List

2.2.1方法一:

ArrayList<String> list2 = new ArrayList<>();
        list2.add("hello");
        list2.add("bit");
        list2.add("hehe");
        System.out.println(list2);

2.2.2方法2:

for循环打印:

for(int i = 0;i<list2.size();i++){
            System.out.print(list2.get(i)+" ");
        }
        System.out.println();

2.2.3方法3:

foreach打印:

for (String s:list2) {
            System.out.print(s+" ");
        }
        System.out.println();

2.2.4方法4:

迭代器打印(一):

Iterator<String> it = list2.iterator();
        while (it.hasNext()){
            //it指代第一个元素的前一个位置
            System.out.print(it.next()+" ");
        }
        System.out.println();

迭代器打印(二):

//ListIterator的功能包括了 Iterator
        ListIterator<String> it2 = list2.listIterator();
        while (it.hasNext()){
            //it指代第一个元素的前一个位置
            System.out.print(it.next()+" ");
        }
        System.out.println();

2.2.5利用remove删除List中的元素

2.2.6利用迭代器中add方法给List中添加元素

ArrayList<String> list2 = new ArrayList<>();
        list2.add("hello");
        list2.add("bit");
        list2.add("hehe");
    //实现了List接口的,一般都可以用ListIterator来打印
        ListIterator<String> it2 = list2.listIterator();
  while (it2.hasNext()){
            String ret = it2.next();
            if(ret.equals("hello")){
                it2.add("hanghang");//此时的add后面的数据是在it2后面添加进去的
                //list.add("hanghang");此时就会报错,抛出异常
            }else {
                System.out.println(ret + " ");
            }
        }
        System.out.println(list2);

2.2.7ArrayList的简单实用方法

ArrayList的remove方法:

那么我们来思考一个问题:

为什么刚开始new ArrayList指定的大小是0,我们add元素的时候,仍然没有报错呢?

这个主要是因为ArrayList的源码中可以扩容,欲知具体原因,我们下一章节再讲。

经验分享 程序员 微信小程序 职场和发展