举个例子,
例如我们班上本来有10个同学,我们定义一个数组来存储每个同学的名字。
这是没有问题的,但是,
在这个时候我们班上来了一个插班生,那现在我们班上的总人数是11,数组的长度在定义的时候就已经确定了,如果想装下这11个人又需要定义一个新的长度能装下11的数组,那每一次的人员变动都会导致现有的数组不可用。
那么我们有没有一个比较好的解决方式呢?、
今天我们即将学习的集合ArrayList可以帮助我们解决这个问题。
集合类:提供一种存储空间可变的存储模型,存储的容量可以发生改变。
共同点:他们都可以存储数据。
不同点:数组的容量是固定的,在数组定义的时候就已经确定了,集合的容量是可以改变的。
集合类非常多,我们先学习ArrayList类
ArrayList< E >
这个E代表我们存入的引用数据类型,意思就是说在我们定义的这个集合里,存储的都是E这个类型的数据。
例如:
ArrayList<String> arrayList = new ArrayList<>();
//构造方法
public ArrayList()
//添加方法
//将指定的元素加入到集合末尾
public boolean add(E e)
//将指定的元素加入到指定的索引位置
public void add(int index,E element)
使用:
我们接着前导里说的来实现加入插班生。
1.首先定义一个Student类
2.创建出对象
3.使用add方法将学生加入到集合中
//1.首先定义一个Student类
public class Student {
private String name;
private String age;
public Student() {
}
}
//创建出对象,我创建三个为例
Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();
//调用add方法
ArrayList<Student> arrayList = new ArrayList<>();
arrayList.add(s1);
arrayList.add(s2);
arrayList.add(s3);
方法名 | 说明 |
---|---|
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() | 返回集合中的元素的个数 |
先用size()方法取得集合的长度,再像数组那样进行遍历
代码:
public static void main(String[] args) {
//新建一个集合
ArrayList<String> arrayList = new ArrayList<>();
//将数组添加到集合中
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
System.out.println(arrayList);
//遍历输出集合中的数据
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
}
思路:
我们删除集合中的数据
1.先遍历集合,拿到每一个元素
2.通过每一个元素的比较,如果是我们想要删除的数据,则进行删除
例子:删除"c"
public static void main(String[] args) {
//新建一个集合
ArrayList<String> arrayList = new ArrayList<>();
//将数组添加到集合中
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
arrayList.add("c");
arrayList.add("c");
arrayList.add("c");
System.out.println(arrayList);
//遍历输出集合中的数据
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
//删除数据c
for (int i = 0; i < arrayList.size(); i++) {
if("c".equals(arrayList.get(i))){
arrayList.remove(i);
}
}
System.out.println(arrayList);
}
根据我们的设想,按照操作来,现在应该已经把数据c删除了
运行结果:
集合中还是存在"c"?
这其中存在一个问题,就是你删除完一个元素之后,后面的元素位置都往前移动了
原来的数据是a b c d c c c
当遇到第一个c并删除后,得 a b d c c c
第二个c索引本来是4,删除后索引变成了3,导致集合的长度减少,在进行
i < arrayList.size()的时候直接退出循环,导致删除失败
解决方法:
public static void main(String[] args) {
//新建一个集合
ArrayList<String> arrayList = new ArrayList<>();
//将数组添加到集合中
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
arrayList.add("c");
arrayList.add("c");
arrayList.add("c");
System.out.println(arrayList);
//遍历输出集合中的数据
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
//删除数据c
for (int i = 0; i < arrayList.size(); i++) {
if("c".equals(arrayList.get(i))){
arrayList.remove(i);
i--;
}
}
System.out.println(arrayList);
}
只需要加上这一步,如果删除成功使i的值-1,然后再去for循环中的i++,相当于下一个判断的位置还是当前位置。
运行结果:
成功删除
如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。