一、集合概述
1.它是什么
- 集合是与数组类似,也是一种容器,用于装数据的。
2.它的特点
那么,先说说数组的特点:
- 数组定义完成并启动后,类型确定、长度固定。
- 问题: 在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的。
- 举例:
- 比如招聘网找工作的时候,那些岗位的数量是不能确定的,所以不可以用数组来容纳
- 比如购物车里的商品,随时随地可以加新的商品到购物车,因此数量是不能确定的,所以不可以用数组来容纳
集合的特点:
- 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
- 集合非常适合做元素个数不确定,且要进行增删数据操作的业务场景。
- 集合提供了许多丰富、好用的功能——>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