保存数据会经常使用到数组,但数组存在以下几个缺陷:
- 长度固定;
- 保存的必须为同一类型的元素,(基本数据类型,或引用数据类型);
- 使用数组进行增加元素的步骤比较麻烦;
这个时候就需要用一个比数组要“高级的容器”来解决,这就是集合:
- 可以动态保存任意多个不同类型对象,使用方便;
- 提供了一系列方便的操作对象的方法: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"));//trueSystem.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的元素返回被删除元素 //aSystem.out.println(list.remove("e"));//删除知道元素e //trueSystem.out.println(list);//[b, c, d]//修改元素System.out.println(list.set(1, "111"));//修改指定索引1的元素,返回原来的元素 //cSystem.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;}
}