【java】ArrayList集合的学习

文章介绍了Java中的ArrayList集合,作为数组的替代,它允许动态扩容。内容包括ArrayList的创建、泛型使用、成员方法(如添加、删除、修改和查询元素),以及如何创建和使用标准的JavaBean。此外,还展示了如何遍历集合和使用迭代器,并提及ArrayList的底层扩容机制。
摘要由CSDN通过智能技术生成

关于集合

1.在没有学习集合前,我们储存多个元素时按照以前所学,都是用数组来储存数据,但是数组有着很明显的弊端,就是它的长度创建完毕后,就固定不能变化了,所以这时候就要用到集合,集合和数组一样,也是一个容器,也可以用来存储多个数据,但是他的长度是可以发生变化的,能够自动扩容。对比数组,集合更加灵活,易于使用。集合有很多钟,以后用的最多的为ArrayList集合,也就是今天所学习的一种集合。

在使用集合前,我们首先要创建集合的对象
1.创建集合的对象:

ArrayList<E> list=new ArrayList<>();

其中,E代表泛型,泛型是指存入数据的类型。与数组不同的是,集合中不能存入基本数据类型,所以我们要把基本数据类型换为其对应的包装类

基本类包装类
shortShort
byteByte
charChar
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

2.ArrayList成员方法

方法名说明
boolean add(E e)添加元素,返回值表示是否添加成功
boolean remove(E e)删除指定元素,返回值表示是否删除成功
E remove(int index)删除指定索引元素,返回被删除元素
removeAll()删除指定集合中所有元素(括号中为集合名)
E set(int index,E e)修改指定索引的元素,返回原来元素
E get(int index)获取指定元素
int size()集合的长度

总结为“增、删、改 、查”。
3.演示
首先,我们要创建一个Student类,并且是标准的javabean。标准的javabean包括四点:
1.私有化成员
2.空参构造方法
3.带全部参数的构造方法
4.get/set方法

 public   class Student{
    private  String name;
    private  int age;
    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;
    }
      }

然后我们再创建一个测试类Test`

public class Test {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();//创建泛型为Student的集合
        //创建学生对象
        Student s1 = new Student("张三", 20);
        Student s2=new Student("李四",19);
        //添加元素
        list.add(s1);
        list.add(s2);
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Student stu=list.get(i);//获取元素
            System.out.println(stu.getName()+stu.getAge());//此处不能直接打印stu,不然会输出地址值
        }
    }
}

注意,当使用键盘输入学生信息时候,因为集合长度为0,所以要先设置好输入学生的个数。

当我们想要查找一个学生时,我们可以通过输入他的名字来获取他的信息,同样以上面的代码为例子

public class Test {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        Student s1 = new Student("张三", 20);
        Student s2=new Student("李四",19);
        Student s3=new Student("李四",22);
        list.add(s1);
        list.add(s2);
        list.add(s3);
       
      checkout(list,"李四" );//传递集合和所要查找的学生姓名
    }
    public static void checkout(ArrayList<Student> list,String name){
        for (int i = 0; i < list.size(); i++) {
            Student stu=list.get(i);
           String na= stu.getName();//获取i索引下的名字,与传递过来的name进行判断
            if (na.equals(name)){
                System.out.println(stu.getName()+","+stu.getAge());
            }
        }
    }
}

以上面为例,修改方法:

Student s4=new Student("王五",25);
        list.set(1,s4);//1代表索引

修改前修改前

修改后

4.使用迭代器来遍历集合

public class Test {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        Student s1 = new Student("张三", 20);
        Student s2=new Student("李四",19);
        Student s3=new Student("李四",22);
        list.add(s1);
        list.add(s2);
        list.add(s3);
        //获取迭代器对象
        //迭代器好比是一个箭头,,默认指向集合的0索引处
        Iterator<Student> it=list.iterator();
        //判断当前位置是否有元素
        while(it.hasNext){
           String str=it.next();//获取当前对象并移动指针
           System.out.println(str);
        }
       }
       }

细节:迭代器遍历完毕,指针并不会复位,如果需要再次遍历,需要再次获取迭代器的对象。循环中只能用一次next方法。并且在
迭代器中,不能用集合方法去增加或删除,只能用迭代器提供的remove方法删除,目前添加木有办法。

结语

本文中仅演示了几个较为简单的关于ArrayList集合的使用,在往后的数据存储中,集合将会发挥出非常大的作用。

ArrayList集合底层原理

1.利用空参构造创建的集合,在底层创建一个默认长度为0的数组
2。添加第一个元素时,底层会创建一个新长度为10的数组
3.存满时,会扩容1.5倍
4.如果一次添加多个元素,1.5倍还放不下,则创建数组的长度以实际为准。

 public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

其中ArrayList的空参构造中的elementData其实就是一个数组而后面的 DEFAULTCAPACITY_EMPTY_ELEMENTDATA其实就是一个长度为0的数组。所以在创建对象时,在底层创建了一个长度为0的数组。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值