java中ArrayList的简述和用法

文章介绍了在商品管理系统开发中从数组转向使用ArrayList的原因,ArrayList作为List接口的实现,允许动态调整大小,避免了内存浪费。文章详细阐述了ArrayList的基本使用,包括如何实例化、添加、删除、获取和设置元素,以及其大小的动态变化。此外,还提及了接口引用实现类的灵活性和一些常用方法,如remove、size、get和set。
摘要由CSDN通过智能技术生成

520怎么过?难过!

引言:

        在商品管理系统的开发和迭代(前面几篇博客中提到过)中,我发现我的商品属性都是用数组储存的,虽然用数组储存可以更加直观准确得遍历和自定义方法体(当时我是这样认为的),但是一个最大的弊端就是————在数组定义的时候它的大小就已经确定了;如果数组大小远远大于商品数,就会造成内存空间的浪费;反之就会造成商品信息没有足够的空间存储。

        后面在一次实验课中了解到List这个接口,它有一个实现类ArrayList,ArrayList的特点就是可以动态地调整自己的大小,而且它的子类中有很多已经写好的方法体,只需要用户自己去调用就行。

简介:

        ArrayList实现了List这个接口,List接口继承了collection接口,它是声明有序存储对象(可重复)功能的公共接口。List集合中只能存引用数据类型,不能存基础数据类型;当然如果一定要存的话可以用基础数据类型的封装类。这也决定了ArrayList也只能存对象。

        按我的理解,ArrayList是把每个对象的地址以数组的方式存储起来,只不过这个数组长度是可变的。

使用:

        先写一个自定义类:

public class Test{
    private String aString;
    private double aDouble;
    private int anInt;
    public Test(String aString,double aDouble,int anInt){
        this.aString=aString;
        this.aDouble=aDouble;
        this.anInt=anInt;
    }


    public String getaString() {
        return aString;
    }

    public void setaString(String aString) {
        this.aString = aString;
    }

    public double getaDouble() {
        return aDouble;
    }

    public void setaDouble(double aDouble) {
        this.aDouble = aDouble;
    }

    public int getAnInt() {
        return anInt;
    }

    public void setAnInt(int anInt) {
        this.anInt = anInt;
    }
}

        实例化对象:

        这里有两种方法:

直接“Object obj=new Object()”形式

import java.util.ArrayList;
public class Testmain {
     public static void main(String[]args){
         ArrayList<Test> testArrayList=new ArrayList<>();
     }
}

        这里要注意ArrayList的构造方法,它是一个泛型类,所以<>中要填入你要存储的数据的类型。

接口的引用指向实现类

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class Testmain {
     public static void main(String[]args){
         List<Test> testList=new ArrayList<>();
         //Collection<Test> testCollection=new ArrayList<>();
         //以上两种都行
     }
}

        我个人推荐“接口的引用指向实现类”的写法,因为接口可以有多个实现类,万一哪天你想换个实现类玩玩,你只需要把new的部分改一下就行了。

        方法体的描述和使用

1.add方法

        add(Object element)方法是往ArrayList的末尾里存一个元素,它有一个重载方法add(int index,Object element)在指定位置添加一个元素,如果该位置有一个元素就把它替换掉

import java.util.ArrayList;
import java.util.List;

public class Testmain {
     public static void main(String[]args){
         List<Test> testList=new ArrayList<>();
         testList.add(new Test("lihua",10.9,100));
         testList.add(1,new Test("wangwu",1.9,110));//add的一个重载方法,根据下标所在位置添加
         testList.add(new Test("zhangsan",0.9,500));
         System.out.println(testList);
     }
}

        如果测试一下会发现,这里打印出来的是一组地址,也验证了我前面的猜想,ArrayList存储的实际是一组地址。如果想得到这个类的属性,记得去重写自定义类的toString方法。

@Override
    public String toString() {
        return "Test{" +
                "aString='" + aString + '\'' +
                ", aDouble=" + aDouble +
                ", anInt=" + anInt +
                '}';
    }

        然后再打印。

[Test{aString='lihua', aDouble=10.9, anInt=100}, Test{aString='wangwu', aDouble=1.9, anInt=110}, Test{aString='zhangsan', aDouble=0.9, anInt=500}]

2.remove方法

        remove(int index)方法是在删除指定位置的元素,它有一个重载方法remove(Object element)删除指定元素

import java.util.ArrayList;
import java.util.List;

public class Testmain {
     public static void main(String[]args){
         List<Test> testList=new ArrayList<>();
         Test a=new Test("lihua",10.9,100);
         testList.add(a);
         testList.add(new Test("wangwu",1.9,110));
         testList.add(new Test("zhangsan",0.9,500));
         System.out.println(testList);
         testList.remove(1);
         testList.remove(a);//remove的重载方法-删除指定对象,参数必须是实例化出来的对象
         //testList.remove(new Test("lihua",10.9,100));//错误
         //testList.remove(new Test("zhangsan",0.9,500));//错误
         System.out.println(testList);
     }
}

 3.size方法

        size()方法返回的是这个集合的大小,我们可以用它验证ArrayList的大小是动态变化的。

import java.util.ArrayList;
import java.util.List;

public class Testmain {
     public static void main(String[]args){
         List<Test> testList=new ArrayList<>();
         testList.add(new Test("张三",10.9,121));
         System.out.println(testList.size());
         testList.add(new Test("李四",12.9,199));
         testList.add(new Test("王五",12.8,88));
         System.out.println(testList.size());
         testList.remove(1);
         System.out.println(testList.size());
     }
}

4.get方法

        get(int index)方法返回指定位置上的元素

import java.util.ArrayList;
import java.util.List;

public class Testmain {
     public static void main(String[]args){
         List<Test> testList=new ArrayList<>();
         testList.add(new Test("张三",10.9,121));
         testList.add(new Test("李四",12.9,199));
         testList.add(new Test("王五",12.8,88));
          System.out.println(testList.get(1));
     }
}

5.set方法

        set(int index,Object element)方法用元素element取代位置index上的元素并返回旧元素的值

import java.util.ArrayList;
import java.util.List;

public class Testmain {
     public static void main(String[]args){
         List<Test> testList=new ArrayList<>();
         testList.add(new Test("张三",10.9,121));
         testList.add(new Test("李四",12.9,199));
         testList.add(new Test("王五",12.8,88));
         System.out.println(testList);
         System.out.println(testList.set(0, new Test("李华", 11.8, 98)));
         System.out.println(testList);
     }
}

6.sort方法

        这个方法用来给元素排序,但是一个元素有多个属性,根据哪个属性来排呢,所以就需要传入一个比较器接口并实现compare方法进行定制排序(因为ArrayList的元素全是引用类型,所以不存在自然排序),这个过于复杂(需要读源码理解原理,用到lambda表达式简化代码),下篇博客会更加全面的讲到,这里就不多说了。

7.其他方法

        以上是一些常见的、经常用到的方法,还有一些不常见的但在一些特殊场景要用到的我就不多介绍了,可以去读其他博主的文章或者查java帮助文档。

瑞思拜!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值