集合概述
集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
将要学习的集合类:ArrayList
- 可调整大小的数组实现
<E>
:是一种特殊的数据结构,泛型 -> 限定集合中存储数据的类型- 使用:在出现E的地方使用引用数据类型替换即可
- 举例:
ArrayList < String >
,Array < Student>
集合和数组的区别
- 长度:数组的长度是固定的,集合的长度是可变的(自动)
- 存储类型:数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型,如果想存基本数据类型,需要把他们变成其对应的包装类
ArrayList构造方法
方法名 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
代码演示:
ArrayList<String> array = new ArrayList<String>();
//JDK7以后 可以省略后面<>中的数据类型
ArrayList<String> array = new ArrayList<>();
ArrayList集合常用方法
方法名 | 说明 |
---|---|
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合的指定位置插入指定的元素 |
public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素个数 |
代码演示:
import java.util.ArrayList;
public class ArrayList2 {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<>();
array.add("hello");
array.add("world");
array.add("java");
array.add(0,"cat");
array.add(1,"pig");
System.out.println(array.remove("maomao"));
System.out.println(array.remove("world"));
System.out.println("array: " + array);
System.out.println("- - - - - - - - - - - - -");
System.out.println(array.remove(1));
System.out.println("array: " + array);
System.out.println("- - - - - - - - - - - - -");
System.out.println(array.set(2, "dog"));
System.out.println("array: " + array);
System.out.println("- - - - - - - - - - - - -");
System.out.println(array.get(0));
System.out.println("- - - - - - - - - - - - -");
System.out.println(array.size());
}
}
输出结果:
false
true
array: [cat, pig, hello, java]
- - - - - - - - - - - - -
pig
array: [cat, hello, java]
- - - - - - - - - - - - -
java
array: [cat, hello, dog]
- - - - - - - - - - - - -
cat
- - - - - - - - - - - - -
3
案例1:存储字符串并遍历
需求:
创建一个存储字符串的集合,存储若干个字符串元素,使用程序实现在控制台遍历该集合
代码实现:
import java.util.ArrayList;
public class ArrayList {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<>();
array.add("wo");
array.add("shi");
array.add("maomao");
for (int i = 0; i < array.size(); ++i) {
//System.out.println(array.get(i));
//通用格式
String s = array.get(i);
System.out.println(s);
}
}
}
解释: 为什么要用这个通用格式?
String s = array.get(i);
System.out.println(s);
用s接受这个对象,可能还需要做其他别的操作,所以这个作为通用格式
输出结果:
wo
shi
maomao
案例2:存储基本数据类型
需求:定义一个集合,添加数字,并进行遍历
遍历格式参照:[元素1,元素2,元素3]
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
public class ArrayTest {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
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.print("]");
}
}
案例3:存储学生对象并遍历
需求:
创建一个存储学生对象的集合,存储三个学生对象,使用程序实现在控制台遍历该集合
代码实现:
先建立一个学生类:
public class Student {
private String name;
private int age;
省略构造函数和成员方法
}
测试类:
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList<>();
Student s1 = new Student("duoduo", 2);
Student s2 = new Student("cat", 24);
Student s3 = new Student("tiger", 22);
array.add(s1);
array.add(s2);
array.add(s3);
for (int i = 0; i < array.size(); ++i) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
}
输出结果:
duoduo,2
cat,24
tiger,22
案例4:存储学生对象并遍历(升级版)
需求:
创建一个存储学生对象的集合,存储三个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自键盘录入
代码实现:
学生类:为了方便键盘录入,将学生类的成员变量都定义为String类型(其他和案例2的学生类一样)
public class Student {
private String name;
private String age;
//省略构造函数和成员方法
}
测试类:
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList<>();
addStudent(array);
addStudent(array);
addStudent(array);
for (int i = 0; i < array.size(); ++i) {
Student s = array.get(i);
System.out.println(s.getName() + "," + s.getAge());
}
}
public static void addStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名: ");
String name = sc.nextLine();
System.out.println("请输入学生年龄: ");
String age = sc.nextLine();
Student s = new Student();
s.setAge(age);
s.setName(name);
array.add(s);
}
}
输出结果:
请输入学生姓名:
maomao
请输入学生年龄:
22
请输入学生姓名:
duoduo
请输入学生年龄:
2
请输入学生姓名:
xiaozhu
请输入学生年龄:
24
maomao,22
duoduo,2
xiaozhu,24
案例5:添加用户对象并判定是否存在
需求:
1。main方法中定义一个集合,存入三个用户对象
用户属性为:id,username,password
2。要求:定义一个方法,根据id查找对应的用户信息
如果存在,返回true
如果不存在,返回false
package String;
public class User {
private String id;
private String username;
private String password;
//省略构造函数和成员方法
}
import java.util.ArrayList;
public class Test5 {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
User u1 = new User("001", "duoduo", "123");
User u2 = new User("002", "xiaozhu", "456");
User u3 = new User("003", "xiaomao", "789");
list.add(u1);
list.add(u2);
list.add(u3);
boolean flag = isContains(list, "003");
System.out.println(flag);
}
public static boolean isContains(ArrayList<User> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
return true;
}
}
return false;
}
}
案例6:添加用户对象并返回查找用户信息
需求:
1。main方法中定义一个集合,存入三个用户对象
用户属性为:id,username,password
2。要求:定义一个方法,根据id查找对应的用户信息
如果存在,返回索引
如果不存在,返回-1
public static int getIndex(ArrayList<User> list, String id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
return i;
}
}
return -1;
}
public static boolean isContains(ArrayList<User> list, String id) {
return getIndex(list, id) >= 0;
}
案例7:添加手机对象并返回要求的数据
需求:
- 定义Javabean类:Phone
- Phone的属性:品牌,价格
- main方法定义一个集合,存入三个手机对象
- 分别是:小米,1000。苹果,8000。锤子,2999。
- 定义一个方法,将价格低于3000的手机信息返回。
public class Phone {
private String brand;
private int prize;
//省略构造函数和成员方法
}
public class PhoneTest {
public static void main(String[] args) {
ArrayList<Phone> list = new ArrayList<>();
Phone p1 = new Phone("小米", 1000);
Phone p2 = new Phone("苹果", 8000);
Phone p3 = new Phone("锤子", 2999);
list.add(p1);
list.add(p2);
list.add(p3);
ArrayList<Phone> resultList = getPhoneInfo(list, 3000);
for (int i = 0; i < resultList.size(); i++) {
Phone phone = resultList.get(i);
System.out.println(phone.getBrand() + "," + phone.getPrize());
}
}
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list, int money) {
ArrayList<Phone> resultList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Phone p = list.get(i);
if (p.getPrize() < money) {
resultList.add(p);
}
}
return resultList;
}
}