ArrayList集合概述和基本使用

  • 集合容器和数组容器的区别?
  • 如何使用ArrayList集合容器?
总结:

    1.  长度: 
            数组的长度是固定的, 集合的长度是可变的.
        存储:
            数组可以存储基本数据类型, 也能存储引用数据类型
                int[] arr = new int[2];
                Person[] pArr = new Person[2];

                数组存储基本数据类型, 存储的是具体的值
                数组存储引用数据类型, 存储的是地址值.

        集合只能存储引用数据类型.

    2.创建对象的格式

            类名<要存储的数据类型> 对象名 = new 类名<>();

            ArrayList<String> list = new ArrayList<>();


        注意:
               1. 创建集合容器的时候, <>可以省略不写, 但会有数据的安全隐患

               问题: <>是什么?

                      泛型! jdk1.5版本之后引入, 作用是限定集合可以存储什么样的数据类型.

                      在jdk1.7版本之后, 等号右侧简括号的内容可以省略不写, 菱形泛型.

              2. 打印集合对象的对象名, 结果不是地址值, 而是集合中的元素内容

                   A. 集合中存储的如果是Java写好的类型, 例如String, 那么打印的结果就是元素内容

                   B. 集合中如果存储的是自定义的类型, 例如Person, 那么打印的结果就是地址值


    3. 示例代码

            public static void main(String[] args) {
                ArrayList<String> list = new ArrayList<>();
                list.add("abc");
                list.add("bbb");
                System.out.println(list);           // [abc, bbb]

                System.out.println("---------------");

                ArrayList<Person> list2 = new ArrayList<>();
                list2.add(new Person("张三",23));
                list2.add(new Person("李四",24));

                System.out.println(list2);          // [地址值1, 地址值2]
            }

ArrayList集合的常用方法和遍历

  • public boolean add(E e)
  • 向集合中添加元素
  • 返回是否添加成功的状态值
    * ArrayList集合, 允许存储重复的, 该方法的返回值永远都是true
    * HashSet集合, 不允许存储重复的, 该方法的返回值就跟添加的元素有关(了解)
  • public E remove(int index)
  • 根据索引, 删除集合中的元素, 该方法返回的是被删除的元素
  • public E get(int index)
  • 根据索引, 获取集合中对应的元素
  • public int size()
  • 返回集合的元素个数, 类似数组的length属性
array.length;

        list.size();
  • 集合的遍历:
示例代码:

    public static void main(String[] args){
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        list.add("123");

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

ArrayList集合存储基本数据类型

  • 集合因为泛型的限定, 只能存储引用数据类型, 如果要存储基本数据类型怎么办?
总结:  需要基本数据类型对应的包装类
  • 什么是包装类?
  • 八种基本数据类型的包装类有哪些?
总结:
    1. 将基本数据类型, 包装成了一个类, 类就是引用数据类型了.

    2.

        byte            Byte
        short           Short
        int             Integer     --> 特殊
        long            Long
        float           Float
        double          Double
        char            Character   --> 特殊
        boolean         Boolean


        ArrayList<Integer> list = new ArrayList<>();

        ArrayList<Character> list2 = new ArrayList<>();


暂时了解的知识点:

        自动拆装箱, jdk1.5版本之后的特性.

        自动拆箱: 将引用数据类型的包装类, 直接赋值给基本数据类型

            Integer i = new Integer(100);
            int num = i;

        自动装箱: 将基本数据类型的数值, 直接赋值给引用数据类型包装类的变量

            Integer i = 100;

ArrayList练习一_存储随机数字

  • 需求: 生成6个1~33之间的随机整数,添加到集合,并遍历集合。
思路:
    1. 需要存储6个数字,创建一个集合,<Integer>
    2. 产生随机数,需要用到Random
    3. 用循环6次,来产生6个随机数字:for循环
    4. 循环内调用r.nextInt(int n),参数是33,0~32,整体+1才是1~33
    5. 把数字添加到集合中:add
    6. 遍历集合:for、size、get


建议:
    如果操作的元素长度是固定, 推荐使用数组

    如果操作的元素个数是不确定的, 再使用集合.

ArrayList练习二_存储自定义对象

  • 需求: 自定义4个学生对象,添加到集合,并遍历。
思路:
    1. 自定义Student学生类,四个部分。
    2. 创建一个集合,用来存储学生对象。泛型:<Student>
    3. 根据类,创建4个学生对象。
    4. 将4个学生对象添加到集合中:add
    5. 遍历集合:for、size、get

ArrayList练习三_按指定格式遍历集合字符串

  • 需求: 定义以指定格式打印集合的方法(ArrayList类型作为参数)
  • 使用{}扩起集合,使用@分隔每个元素。
  • 格式参照 {元素@元素@元素}。
  • 示例代码:
public static void printArrayList(ArrayList<String> list) {
    // {10@20@30}
    System.out.print("{");
    for (int i = 0; i < list.size(); i++) {
        String name = list.get(i);
        if (i == list.size() - 1) {
            System.out.println(name + "}");
        } else {
            System.out.print(name + "@");
        }
    }
}

ArrayList练习四_筛选集合中的随机数.

  • 需求: 用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中。
  • 要求使用自定义的方法来实现筛选。
  • 分析:
分析:
    1. 需要创建一个大集合,用来存储int数字:<Integer>
    2. 随机数字就用Random nextInt
    3. 循环20次,把随机数字放入大集合:for循环、add方法
    4. 定义一个方法,用来进行筛选。
        筛选:根据大集合,筛选符合要求的元素,得到小集合。
        三要素
        返回值类型:ArrayList小集合(里面元素个数不确定)
        方法名称:getSmallList
        参数列表:ArrayList大集合(装着20个随机数字)

    5. 判断(if)是偶数:num % 2 == 0
    6. 如果是偶数,就放到小集合当中,否则不放。


示例代码:

    public class Demo04ArrayListReturn {

        public static void main(String[] args) {
            ArrayList<Integer> bigList = new ArrayList<>();
            Random r = new Random();
            for (int i = 0; i < 20; i++) {
                int num = r.nextInt(100) + 1; // 1~100
                bigList.add(num);
            }

            ArrayList<Integer> smallList = getSmallList(bigList);

            System.out.println("偶数总共有多少个:" + smallList.size());
            for (int i = 0; i < smallList.size(); i++) {
                System.out.println(smallList.get(i));
            }
        }

        // 这个方法,接收大集合参数,返回小集合结果
        public static ArrayList<Integer> getSmallList(ArrayList<Integer> bigList) {
            // 创建一个小集合,用来装偶数结果
            ArrayList<Integer> smallList = new ArrayList<>();
            for (int i = 0; i < bigList.size(); i++) {
                int num = bigList.get(i);
                if (num % 2 == 0) {
                    smallList.add(num);
                }
            }
            return smallList;
        }

    }