保存数据会经常使用到数组,但数组存在以下几个缺陷:
- 长度固定;
- 保存的必须为同一类型的元素,(基本数据类型,或引用数据类型);
- 使用数组进行增加元素的步骤比较麻烦;
这个时候就需要用一个比数组要“高级的容器”来解决,这就是集合:
- 可以动态保存任意多个不同类型对象,使用方便;
- 提供了一系列方便的操作对象的方法:add、remove、set、get等;
- 使用集合添加、删除新元素要简单的多;
- 集合不能存放基本数据类型,只能存放对象的引用,对于基本数据类型的存放,都是存的包装类,即 Integer、Byte等;
<E>表示泛型
import java.util.ArrayList;
public class Demo01 {
public static void main(String[] args) {
//泛型:限定集合中存储数据的基本类型
//不能写int 要用Integer
// ArrayList<int> list = new ArrayList<>(); //报错
ArrayList<String> list = new ArrayList<>();
//此时我们创建的是ArrayList的对象,而ArrayList是java已经写好的一个类
// 这个类在底层做了一些处理打印对象不是地址值,而是集合中存储数据内容
// 在输出的时候会拿[]把所有的数据进行包裹
System.out.println(list); //[]
}
}
ArrayList成员方法
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素,返回值表示是否添加成功 |
boolean remove(E e) | 删除指定元素,返回值表示是否删除成功 |
E remove(int index) | 删除指定索引的元素,返回被删除元素 |
E set(int index,E e) | 修改指定索引下的元素,返回原来的元素 |
E get(int index) | 获取指定索引的元素 |
int size() | 集合的长度,也就是集合中元素的个数 |
import java.util.ArrayList;
public class ArraylistDemo02 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
//添加元素
System.out.println(list.add("a"));//true
System.out.println(list);//[a]
//多添加几个
list.add("b");
list.add("c");
list.add("d");
list.add("e");
System.out.println(list);//[a, b, c, d, e]
//获取长度
System.out.println(list.size());//5
//遍历
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");//a b c d e
}
System.out.println();//换行
//删除元素
System.out.println(list.remove(0));//删除索引为0的元素返回被删除元素 //a
System.out.println(list.remove("e"));//删除知道元素e //true
System.out.println(list);//[b, c, d]
//修改元素
System.out.println(list.set(1, "111"));//修改指定索引1的元素,返回原来的元素 //c
System.out.println(list);//[b, 111, d]
//查询
System.out.println(list.get(0));//获取指定索引的元素 //b
}
}
基本数据类型对应的包装类:
int Integer char Character byte Byte short Short long Long float Float double Double boolean Boolean
例1:
import java.util.ArrayList;
public class Demo03 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
//遍历
System.out.print("[");
for (int i = 0; i < list.size(); i++) {
if (i == list.size() - 1) {
System.out.print(list.get(i));
} else {
System.out.print(list.get(i) + ",");
}
}
System.out.println("]");
//[a,b,c,d,e]
ArrayList<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(2);
list2.add(3);
list2.add(4);
list2.add(5);
//遍历
System.out.print("[");
for (int i = 0; i < list2.size(); i++) {
if (i == list2.size() - 1) {
System.out.print(list2.get(i));
} else {
System.out.print(list2.get(i) + ",");
}
}
System.out.println("]");
//[1,2,3,4,5]
ArrayList<Character> list3 = new ArrayList<>();
list3.add('s');
list3.add('d');
list3.add('f');
System.out.println(list3);//[s, d, f]
}
}
例2:
import java.util.ArrayList;
public class ArraylistDemo04 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
//创建学生对象
Student s1 = new Student("nn", 5);
Student s2 = new Student("hh", 6);
//添加元素
list.add(s1);
list.add(s2);
//换种方式添加
list.add(new Student("pd", 7));
list.add(new Student("bb", 8));
//遍历集合
for (int i = 0; i < list.size(); i++) {
//方式一
//System.out.print(list.get(i).getName() + "," + list.get(i).getAge()+" ");
// 方式二
Student student = list.get(i);
System.out.print(student.getName() + "," + student.getAge() + " ");
//nn,5 hh,6 pd,7 bb,8
}
}
}
class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
例3
import java.util.ArrayList;
import java.util.Scanner;
public class ArraylistDemo05 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
//键盘录入
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
Student student = new Student();
System.out.println("请输入学生姓名");
String name = sc.next();
System.out.println("亲输入学生年龄");
int age = sc.nextInt();
//name,age赋值给学生对象
student.setName(name);
student.setAge(age);
//学生对象添加到集合中
list.add(student);
}
//遍历集合
for (int i = 0; i < list.size(); i++) {
//方式一
System.out.print(list.get(i).getName() + "," + list.get(i).getAge() + " ");
}
}
}
class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
例4
import java.util.ArrayList;
/*
*定义Javabean类:PhonePhone属性:品牌,价格。
* main方法中定义一个集合,存入三个手机对象。分别为:小米,2000。苹果,8000。华为9999.vivo 2999
* 定义一个方法,将价格低于3000的手机信息返回
*/
public class ArraylistDemo06 {
public static void main(String[] args) {
ArrayList<Phone> list = new ArrayList<>();
//创建手机对象
Phone p1 = new Phone("小米", 2000);
Phone p2 = new Phone("苹果", 8000);
Phone p3 = new Phone("华为", 9999);
Phone p4 = new Phone("vivo", 2999);
//添加数据
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
ArrayList<Phone> info = getPhoneInfo(list);
//遍历
for (int i = 0; i < info.size(); i++) {
System.out.print(info.get(i).getBrand() + "," + info.get(i).getPrice() + " ");
}
}
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list) {
//返回多个数据,可以把这些数据先放到一个容器之中,再把容器返回
ArrayList<Phone> resultList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getPrice() < 3000) {
resultList.add(list.get(i));
}
}
return resultList;
}
}
class Phone {
private String brand;
private int price;
public Phone() {
}
public Phone(String brand, int price) {
this.brand = brand;
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}