本文共 4365 字,大约阅读时间需要 14 分钟。
之前我们学习了数组来进行大量数据的操作,但是数组的缺点也很明显,长度固定,使用的时候特别不方便,有没有更好的方法呢?
Java为我们提供了一个类:ArrayList集合类,它是引用数据类型的一种,可以帮助我们存储多个元素,并且长度可以变化,是可调整大小的数组的实现List接口。可以把它视为一个长度可调整的”数组“。
数组:
是引用数据类型的一种,可以存储多个元素
数组的长度是固定的 int[] arr1 = new int[10]; int[] arr2 = {1,2,3};
数组即可以存储基本数据类型的数据,又可以存储引用数据类型的数据 int[], String[], Student[]
集合:
是引用数据类型的一种,可以存储多个元素
集合的长度是可以变化的(添加元素,删除集合中的元素)
集合只能存储引用数据类型的数据
ArrayList<int> 错误
ArrayList<Integer> ArrayList<Student> ArrayList<String>正确
public ArrayList()
:构造一个内容为空的集合。
基本格式:
ArrayListlist = new ArrayList ();
在JDK 7后,右侧泛型的尖括号之内可以留空,但是<>仍然要写。简化格式:
ArrayListlist = new ArrayList<>();
1).public boolean add(E e) 将指定的元素追加到此集合的末尾(E指“泛型”)
add()方法的参数就是String类型ArrayListlist = new ArrayList<>();
2).public void add(int index,E element) 在此集合中的指定位置插入指定的元素3).public boolean remove(Object o) 删除指定的元素,返回删除是否成功。返回值:是否删除成功!4).public E remove(int index) 删除指定索引处的元素,返回被删除的元素。返回值:被删除的对象! 5).public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素6).public E get(int index) 返回指定索引处的元素7).public int size() 返回集合中的元素的个数8).boolean contains(Object o) 判断集合中是否包含指定的元素9).void clear() 移除此集合(列表)中的所有元素。
异常:
IndexOutOfBoundsException: 索引越界异常,一般集合会报StringIndexOutOfBoundsException: 字符串的索引越界异常ArrayIndexOutOfBoundsException: 数组索引越界异常
注意:ArrayList添加元素,百分之百成功,返回值固定true,不用接收返回值,没有意义
遍历集合:依次打印集合和中的元素
public E get(int index) 返回指定索引处的元素public int size() 返回集合中的元素的个数
快捷键:list.forifor (int i = 0; i < list.size(); i++) { String s = list.get(i); System.out.println(s);}
public static void main(String[] args) { public static void main(String[] args) { //创建ArrayList集合,泛型使用Student ArrayListlist = new ArrayList<>(); //创建Student对象 Student s1 = new Student("小明",18); Student s2 = new Student("小华",18); Student s3 = new Student("小飞",18); //把Student对象添加到集合中 list.add(s1); list.add(s2); list.add(s3); //遍历集合,取出每一个Student对象 for (int i = 0; i < list.size(); i++) { Student s = list.get(i); //System.out.println(s);//?打印的是学生的地址值 // \t:制表符(tab)==>多个空格 System.out.println(s.getName()+"\t"+s.getAge()); } } }
ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似<int>
不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据,<>
中的数据类型,必须转换后才能编写,转换写法如下:
基本类型 | 基本类型包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
需求:
public class Phone { //品牌 private String brand; // 颜色 private String color; // 价格 private double price; public Phone() { } public Phone(String brand, String color, double price) { this.brand = brand; this.color = color; this.price = price; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; }}
import java.util.ArrayList;import java.util.Scanner;public static void main(String[] args) { ArrayListlist = new ArrayList<>(); //通过控制台接收3部手机信息 Scanner sc = new Scanner(System.in); for (int i = 1; i <= 3; i++) { System.out.println("请输入第"+i+"部手机的品牌"); String brand = sc.next(); System.out.println("请输入第"+i+"部手机的颜色"); String color = sc.next(); System.out.println("请输入第"+i+"部手机的价格"); double price = sc.nextDouble(); Phone p = new Phone(brand,color,price); list.add(p); } printArrayList(list);}public static void printArrayList(ArrayList list){ for (int i = 0; i < list.size(); i++) { Phone p = list.get(i); System.out.println(p.getBrand()+"\t"+p.getColor()+"\t"+p.getPrice()); }}
转载地址:http://cdwei.baihongyu.com/