Java集合ArrayList

集合ArrayList

前言

众所周知,前期我们学过数组,也学习过二维的和三维的数组,更有的10维的数组都干出来过,那么我们可以使用更加强大的集合来遍历和存放数据,她可以添加和减小也可以增加和删除,可以更加方便的删除数据而不需要遍历一遍后删除在继续遍历,才可输出正常的数据而不报错!在编程时,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的。如果需要保存数量变化的数据,数组就有点无能为力了。而且数组无法保存具有映射关系的数据,如成绩表为语文——79,数学——80,这种数据看上去像两个数组,但这两个数组的元素之间有一定的关联关系。为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java 提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。Java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口,这两个接口又包含了一些子接口或实现类。图 1 和图 2 分别为 Collection 和 Map 的子接口及其实现类。

而List 是一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。List 实现了 Collection 接口,它主要有两个常用的实现类:ArrayList 类和 LinkedList 类。

而ArrayList 类

ArrayList 类实现了可变数组的大小,存储在内的数据称为元素。它还提供了快速基于索引访问元素的方式,对尾部成员的增加和删除支持较好。使用 ArrayList 创建的集合,允许对集合中的元素进行快速的随机访问,不过,向 ArrayList 中插入与删除元素的速度相对较慢。ArrayList 类的常用构造方法有如下两种重载形式:

  • ArrayList():构造一个初始容量为 10 的空列表。

  • ArrayList(Collection<?extends E>c):构造一个包含指定 Collection 元素的列表,这些元素是按照该 Collection 的迭代器返回它们的顺序排列的。

ArrayList 类除了包含 Collection 接口中的所有方法之外,还包括 List 接口中提供的如表 1 所示的方法。

表 1 ArrayList类的常用方法

方法名称说明
E get(int index)获取此集合中指定索引位置的元素,E 为集合中元素的数据类型
int index(Object o)返回此集合中第一次出现指定元素的索引,如果此集合不包含该元 素,则返回 -1
int lastIndexOf(Object o)返回此集合中最后一次出现指定元素的索引,如果此集合不包含该 元素,则返回 -1
E set(int index, Eelement)将此集合中指定索引位置的元素修改为 element 参数指定的对象。 此方法返回此集合中指定索引位置的原元素
List<E> subList(int fromlndex, int tolndex)返回一个新的集合,新集合中包含 fromlndex 和 tolndex 索引之间 的所有元素。包含 fromlndex 处的元素,不包含 tolndex 索引处的 元素

集合的遍历

列一

package arrayList;
import java.util.ArrayList;
​
public class arrayList {
    public static void main(String[] args) {
        // 创建集合
        ArrayList<String> list = new ArrayList<>();
        // 添加基本元素
        list.add("点赞了么?");
        list.add("收藏了么?");
        list.add("点赞收藏了么?");
        list.add("收藏了!");
​
        // 遍历
        System.out.print("[");
        for (int i = 0; i < list.size(); i++){
            if (i==list.size()-1){
                System.out.print(list.get(i));
            }else {
                System.out.print(list.get(i)+",");
            }
        }
        System.out.println("]");
    }
}

集合的遍历添加基本类型数据

需要包装 类

基本类型包装类

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

示例2

package arrayList;
​
import java.util.ArrayList;
​
public class test2 {
    public static void main(String[] args) {
        // 创建集合
        ArrayList<Integer> list = new ArrayList<>(); // 这里加入了Integer
​
        // 添加元素
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        // 遍历
        System.out.print("[");
        for (int i = 0; i < list.size(); i++){
            if (i==list.size()-1){
                System.out.print(list.get(i));
            }else {
                System.out.print(list.get(i)+",");
            }
        }
        System.out.println("]");
    }
}

我们可以声明一个新的类,将这个集合声明成存放这个类的中类型的数据的集合,使用到了包装(需要将类中的元素声明成私有的类型)不然数据不可使用或是报错!

以此出:

集合 类 的代码

package arrayList;
​
import java.util.ArrayList;
​
public class test3 {
    public static void main(String[] args) {
        // 创建集合
        ArrayList<Student> list = new ArrayList<>();
​
        // 创建学生对象
        Student student01 = new Student("张三",22);
        Student student02 = new Student("王二",21);
        Student student03 = new Student("米丝",25);
​
        // 添加元素
        list.add(student01);
        list.add(student02);
        list.add(student03);
​
        //遍历集合
        for (int i=0; i < list.size();i++){
            // i 索引 list.get(i)元素/学生对象
            Student student = list.get(i);
            System.out.println(student.getName()+","+student.getAge());
        }
    }
}

ArrayList<Student>中的Student类的代码

package arrayList;
​
public class Student {
    /*
    * 私有化成员变量
    * 空参构造
    * 带全部参数的构造方法
    * get/set 方法
    *
    * */
​
    private String name;
    private int age;
​
    public Student(){
    }
​
    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;
    }
}

做到的需求:

定义集合,添加“学生”对象,遍历

学生类属性:姓名,年龄

新的要求:键盘录入

如何键盘录入数据呢?先添加好集合首先因为集合的初始长度是0所以在以下for循环中不能使用集合来进行判断,而是给定一个固定值才行

列:

package arrayList;
​
import java.util.ArrayList;
import java.util.Scanner;
​
public class studentTest1 {
    public static void main(String[] args) {
        // 创建集合  集合创建出来后,长度是默认的0
        ArrayList<Student> list = new ArrayList<>();
​
        // 键盘录入学生信息并添加到集合当中
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 3 ; i++){
            // 学生对象
            Student student = new Student();
​
            System.out.println("请输入学生姓名:");
            String name = scanner.next();
            System.out.println("请输入学生年龄:");
            int age = scanner.nextInt();
​
            // 把获取的值赋值给 对象
            student.setName(name);
            student.setAge(age);
​
            // 学生对象添加到集合中
            list.add(student);
        }
​
        // 输出 存放的数据数目
        System.out.println(list.size());
​
        for (int i=0;i<list.size();i++){
            Student student = list.get(i);
            System.out.println(student.getName()+","+student.getAge());
        }
    }
}

那么如何添加判断呢

列:

package arrayList;
​
import java.util.ArrayList;
​
public class ifArrayList {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
​
        // 创建用户对象
        User ur01 = new User("001","s","123456");
        User ur02 = new User("002","a","1234567");
        User ur03 = new User("003","d","12345678");
​
        // 添加到对象
        list.add(ur01);
        list.add(ur02);
        list.add(ur03);
​
    }
    public static boolean contains(ArrayList<User> list,String uuid){
        for (int i=0;i<list.size();i++){
//            list.get(i).getUuid().equals(uuid);
            User u =list.get(i);
            String id = u.getUuid();
            if (id.equals(uuid)){
                return true;
            }
        }
        // 循环结束 即比较完毕
        return false;
    }
}

User 类

package arrayList;
​
public class User {
    private String uuid;
    private String username;
    private String password;
​
    public User() {
    }
​
    public User(String uuid, String username, String password) {
        this.uuid = uuid;
        this.username = username;
        this.password = password;
    }
​
    public String getUuid() {
        return uuid;
    }
​
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
​
    public String getUsername() {
        return username;
    }
​
    public void setUsername(String username) {
        this.username = username;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道墨思冥

你的鼓励将是我最大的动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值