Logo

郎哥编程

ArrayList类

2019-12-27 223

可以把ArrayList看成一个动态数组,数组大小能够动态改变,并能动态增加和删除元素。

由于ArrayList基于数组实现,因此可以通过下标索引直接查找到指定位置的元素,其查找效率非常高,但每次插入或删除元素时,需要移动大量元素,因此插入删除元素的效率较低。

案例1:建立ArraryListTest测试类,添加String对象到ArrayList集合。

在PCoreUnit5项目新建list包,在list包下新建ArraryListTest类。代码如下:

package list;
 
import java.util.ArrayList;
import java.util.Iterator;
 
/** 
* @ClassName: ArraryListTest 
* @Description: 集合框架(ArrayList类)案例1
* @author 编程训练营 
* @date 
* 
*/
 
public class ArraryListTest {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型 @throws
     */
 
    public static void main(String[] args) {
       // 实例化ArrayList,用于存储学生姓名
       ArrayList<String> studentList = new ArrayList<String>();
       // 添加学生姓名
       studentList.add("李红");
       studentList.add("赵梦影");
       studentList.add("王国强");
       studentList.add("孙立");
       // 删除下标为1的元素,此时删除赵梦影
       studentList.remove(1);
       // 删除姓名为王国强的元素
       studentList.remove("王国强");
       // 修改下标为0的元素,此操作把李红修改为李强
       studentList.set(0, "李强");
       // 输出ArrarList
       System.out.println(studentList);
       // 遍历ArrayList,输出学生姓名
       Iterator<String> iterator = studentList.iterator();
       while (iterator.hasNext()) {
           String s = (String) iterator.next();
           System.out.println(s);
       }
 
    }
 
}

案例代码给出了ArrayList的基本用法,包括元素的增加、修改、删除以及遍历。遍历ArrayList时,需要使用迭代器Iterator,使用hasNext方法判断下一个游标位置是否存在元素,再用next方法获取集合的元素,需要将next方法返回的元素强制转换为需要接收的元素类型。

程序执行结果如下图所示:

 image.png                                            

前面学习了ArrayList存储String类的情况,如果是自定义类呢?

案例2:新建Student类,将Student实例化对象存储到ArrayList集合,并提供Student对象的增、删、改、查操作。

在list包下新建Student类。代码如下:

package list;
 
/**
 * @ClassName: Student
 * @Description: 集合框架(ArrayList类)案例2
 * @author 编程训练营
 * @date
 *
 */
 
public class Student {
    String name;
    String sex;
    int age;
 
    // 利用构造方法传递参数
    public Student(String name, String sex, int age) {
       super();
       this.name = name;
       this.sex = sex;
       this.age = age;
    }
 
    public String getName() {
       return name;
    }
 
    public void setName(String name) {
       this.name = name;
    }
 
    public String getSex() {
       return sex;
    }
 
    public void setSex(String sex) {
       this.sex = sex;
    }
 
    public int getAge() {
       return age;
    }
 
    public void setAge(int age) {
       this.age = age;
    }
 
}

在list包下新建StudentTest类。代码如下:

package list;
 
import java.util.ArrayList;
import java.util.Iterator;
 
/** 
* @ClassName: StudentTest 
* @Description: 集合框架(ArrayList类)案例2
* @author 编程训练营 
* @date  
* 
*/
 
public class StudentTest {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型 @throws
     */
 
    public static void main(String[] args) {
       // 这里存入集合的不是系统已定义的类,而是自己创建的Student类
       ArrayList<Student> list = new ArrayList<Student>();
       // 添加10个Student对象
       for (int i = 0; i < 10; i++) {
           list.add(new Student("name" + i, "女", 10 + i));
       }
       // 使用迭代器Iterator删除前面5个元素
       Iterator<Student> iterator = list.iterator();
       int num = 0;
       while (iterator.hasNext()) {
           // 游标指向下一个
           iterator.next();
           iterator.remove();
           num++;
           // 删除前面0到4个,马上退出循环
           if (num == 5) {
              break;
           }
       }
       // 创建一个Student对象
       Student newStudent = new Student("新生", "女", 18);
       // 改变集合里面第一个元素的值
       list.set(0, newStudent);
 
       // 显示集合里面的元素的具体属性
       for (Student st : list) {
           System.out.println(st.getName() + "\t" + st.getSex() + "\t" + st.getAge());
       }
 
    }
 
}

在StudentTest类的mian方法中声明并实例化了ArrayList集合,该集合存储的元素类型是Student对象。遍历ArrayList集合采用了forearch语句,foreach语句在遍历数组等方面为程序员提供了很大的方便,其语法规则如下:

for(元素变量 x : 遍历对象obj){
  引用了x的java语句
}

程序执行结果如下图所示:

image.png

每个实例化的ArrayList都有一个容量,该容量用来表示能够存储元素的个数,容量是动态变化的,随着向 ArrayList 中不断添加元素,其容量也会自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果能够预知所能存储的元素个数,可在构造 ArrayList 时指定其容量。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论