一、集合概述

1.它是什么

  • 集合是与数组类似,也是一种容器,用于装数据的。

2.它的特点

那么,先说说数组的特点:

java 固定长度输出 不够补充空格 java固定长度list_开发语言

  • 数组定义完成并启动后,类型确定、长度固定
  • 问题: 在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的。
  • 举例:
  • 比如招聘网找工作的时候,那些岗位的数量是不能确定的,所以不可以用数组来容纳
  • 比如购物车里的商品,随时随地可以加新的商品到购物车,因此数量是不能确定的,所以不可以用数组来容纳

集合的特点:

java 固定长度输出 不够补充空格 java固定长度list_java_02

  • 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定
  • 集合非常适合做元素个数不确定,且要进行增删数据操作的业务场景
  • 集合提供了许多丰富、好用的功能——>API,而数组的功能很单一

重点总结

1、数组和集合的元素存储的个数问题?

  • 数组定义后,类型和长度都是固定的
  • 集合定义后,类型可以不固定,且元素大小是可变的

2、数组和集合适合的业务场景?

  • 数组适合做数据个数和类型确定的业务场景
  • 集合适合做数据个数不确定,且要做增删数据操作的业务场景

二、ArrayList集合

1.它是什么

  • ArrayList是集合中的一种,它支持索引。(暂时先学习这个,后期会学习整个集合体系

2.它的对象获取

构造器

说明

public ArrayList()

创建一个空的集合对象

3.它添加元素的方法

方法名

说明

public boolean add(E e)

将指定的元素追加到此集合的末尾

public void add(int index, E element)

在此集合中的指定位置插入指定的元素

package com.app.arraylist;

import java.util.ArrayList;

/**
    目标:学会创建ArrayList对象,代表结合容器,调用它的方法往里面添加元素;
 */
public class ArrayListDemo1 {
    public static void main(String[] args) {
        // 1.创建ArrayList集合的对象
        ArrayList list = new ArrayList();

        // 2.往集合里添加数据: 任何类型的数据都可以
        list.add("Java");
        list.add("MySQL");
        list.add(100);
        list.add("关羽");
        list.add('国');
        list.add(78.7);
        list.add(true);

        // 3.list里存的依旧是ArrayList对象的内存地址
        // 只是因为java做了一些改进,等学习到继承,一切都明白了!!
        System.out.println(list);
        // [Java, MySQL, 100, 关羽, 国, 78.7, true]
        //    0     1     2    3    4    5    6

        // 4.调用ArrayList的方法,给集合中的指定位置插入指定的元素
        list.add(2,"二蛋");
        System.out.println(list);
    }
}
控制台:

[Java, MySQL, 100, 关羽, 国, 78.7, true]
[Java, MySQL, 二蛋, 100, 关羽, 国, 78.7, true]

Process finished with exit code 0

重点总结

1、ArrayList类如何创建集合对象的?如何添加元素?

// 类名 变量名 = new 构造器;
ArrayList list = new ArrayList();

// 添加元素:
// public boolean add(E e)
list.add("元素");	// 可以是任意类型
// public void add(int index,E element)
list.add(3, "元素");

4.泛型概述

  • ArrayList< E >: 其实是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。

举例:

  • ArrayList< String >:此集合只能操作字符串类型的元素
  • ArrayList< Integer >:此集合只能操作整数类型的元素

注意:集合中只能存储引用类型,不支持基本数据类型

package com.app.arraylist;

import java.util.ArrayList;

/**
    目标:能够使用泛型约束ArrayList集合操作的数据类型
 */
public class ArrayListDemo2 {
    public static void main(String[] args) {
        // 创建一个只能存储字符串类型数据的集合
        ArrayList<String> list1 = new ArrayList<String>();
        list1.add("Java");
        list1.add("真棒!");
        // 报错!
        // list1.add(66);
        // list1.add(true);
        // list1.add(66.6);

        // 创建一个只能存储整数类型数据的集合
        ArrayList<Integer> list2 = new ArrayList<>();   // JDK1.7开始,泛型右边的类型申明可以不写
        list2.add(45);
        list2.add(1000);
        // 报错!
        // list2.add(99.9);
        // list2.add("啷个哩个啷!");
        // list2.add(false);
    }
}

说到这里就会有同学不禁发问了:“为什么一定要用泛型约束集合类型呢?不约束不是很好嘛?”

  • 答:打个比方,集合好比厕所,厕所需要分男女厕不?难道男生女生在一个厕所里解决生理?
    所以说,以后都要学会用泛型约束ArrayList集合类型,这样显得比较专业,不然很low

重点总结

1、怎么去统一ArrayList集合操作的元素类型?

  • 使用泛型:<数据类型>
  • ArrayList< String > list = new ArrayList();

三、ArrayList常用API、遍历

1.它的常用方法

方法名称

说明

public E get(int index)

返回指定索引处的元素

public int size()

返回集合中的元素个数

public E remove(int index)

删除指定索引处的元素,返回被删除的元素

public boolean remove(Object o)

删除指定的元素,返回删除是否成功: true、false

public E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

package com.app.arraylist;

import java.util.ArrayList;

/**
    目标:学会使用ArrayList常用API、遍历集合
 */
public class ArrayListAPIOtherDemo3 {
    public static void main(String[] args) {
        // 先创建一个String类型的集合,用于测试
        ArrayList<String> list1 = new ArrayList<>();
        // 添加数据
        list1.add("Java");
        list1.add("MySQL");
        list1.add("MyBatis");
        list1.add("HTML");
        list1.add("网易云");
        list1.add("HTML");

        // 1.public E get(int index)  返回指定索引处的元素
        System.out.println("-----返回指定索引处的元素------");
        String data1 = list1.get(2);
        System.out.println(data1);

        // 2.public int size()  返回集合中的元素个数
        System.out.println("\n-----返回集合中的元素个数------");
        System.out.println(list1.size());

        // 3.遍历集合
        System.out.println("\n-----遍历集合: 不换行用空格隔开------");
        for (int i = 0; i < list1.size(); i++) {
            System.out.print(list1.get(i) + " ");
        }
        System.out.println();

        // 4.public E remove(int index)  删除指定索引处的元素,返回被删除的元素
        System.out.println("\n-----删除指定索引处的元素,返回被删除的元素------");
        System.out.println("原集合: " + list1);
        String data2 = list1.remove(5);
        System.out.println("被删除的是: " + data2);
        System.out.println("新集合: " + list1);

        // 5.public boolean remove(Object o)  删除指定的元素,返回删除是否成功: true、false
        System.out.println("\n-----删除指定的元素,返回删除是否成功: true、false------");
        // 创建一个新集合做测试,类型为String
        ArrayList<String> list2 = new ArrayList<>();
        // 添加数据
        list2.add("Java");
        list2.add("MySQL");
        list2.add("MyBatis");
        list2.add("HTML");
        list2.add("王宝强");
        list2.add("HTML");
        System.out.println("原集合: " + list2);
        // 只会删除第一次出现的这个元素值,后面的不会删除
        System.out.println("删除是否成功: " + list2.remove("HTML"));
        System.out.println("新集合: " + list2);

        // 6.public E set(int index,E element)  修改指定索引处的元素,返回被修改的元素
        System.out.println("\n-----修改指定索引处的元素,返回被修改的元素------");
        System.out.println("原集合: " + list2); // [Java, MySQL, MyBatis, 王宝强, HTML]
        String data3 = list2.set(3, "贾乃亮");
        System.out.println("被修改的是: " + data3);
        System.out.println("新集合: " + list2);
    }
}
控制台:

-----返回指定索引处的元素------
MyBatis

-----返回集合中的元素个数------
6

-----遍历集合: 不换行用空格隔开------
Java MySQL MyBatis HTML 网易云 HTML 

-----删除指定索引处的元素,返回被删除的元素------
原集合: [Java, MySQL, MyBatis, HTML, 网易云, HTML]
被删除的是: HTML
新集合: [Java, MySQL, MyBatis, HTML, 网易云]

-----删除指定的元素,返回删除是否成功: true、false------
原集合: [Java, MySQL, MyBatis, HTML, 王宝强, HTML]
删除是否成功: true
新集合: [Java, MySQL, MyBatis, 王宝强, HTML]

-----修改指定索引处的元素,返回被修改的元素------
原集合: [Java, MySQL, MyBatis, 王宝强, HTML]
被修改的是: 王宝强
新集合: [Java, MySQL, MyBatis, 贾乃亮, HTML]

Process finished with exit code 0