对象数组&ArrayList

本文介绍了Java中的对象数组和ArrayList类,详细讲解了ArrayList的泛型概念、创建及基本操作,包括添加、删除、获取元素及遍历。还提到了自动装箱和拆箱的概念。同时给出了几个关于ArrayList的实际编程练习,如生成随机数、添加自定义对象、自定义打印方法以及筛选偶数元素等。

对象数组&ArrayList

对象数组

给定一个Person类

package Class;
public class Person {
    private String name;
    private int age;     //加了之后只能在本类中使用
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void show() {
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
    }
}

通过这个类可以创建一个对象数组

package Array;

import   Class.Person;

public class objectArray {

    public static void main(String[] args) {
        //创建一个长度为3的数组,里面用来存放Person类型的对象
        Person[] arr = new Person[3];

        //创建三个对象,对象名字其实存储的是地址
        Person one = new Person("Jack", 19);
        Person two = new Person("Alice", 22);
        Person three = new Person("Lin", 31);

        arr[0] = one;
        arr[1] = two;
        arr[2] = three;

        arr[0].show();
        arr[1].show();
        arr[2].show();
    }
}

但是这样有一个缺点,数组的长度不能改变

为了解决这个·问题,我们可以使用ArrayList类

ArrayList类

ArrayList是采用类型参数泛型类

对于ArrayList来说,有一个尖括号表示它是泛型。

什么是泛型?

泛型就是装在集合中的元素,全是统一的类型。

泛型只能是引用数据类型,不能是基本类型。

ArrayList的创建
package Class;

import java.util.ArrayList;
//数组的长度不可改变,但ArrayList可以变

public class ArrayList_ {
    public static void main(String[] args) {

        //创建了一个ArrayList集合,集合的名称是list,
        //里面是装的都是String类型的数据
        //备注:从JDK1.7开始,右侧的尖括号可以不写内容(与左侧一样)
        ArrayList<String> list = new ArrayList<>();

        //添加一些数据
        list.add("who I love");
        list.add("I love you");
        list.add("who are you");

        //打印
        System.out.println(list);

    }
}

ArrayList的基本方法
  1. 添加方法
    list.add(“Jack”);

  2. 从集合中获取元素,get方法。索引值从0开始
    String name = list.get(2);

  3. 从集合中删除元素,remove方法。索引值从0开始
    String nameRemoved = list.remove(1);

  4. 获取list的长度size方法
    int size = list.size();

  5. 遍历list
    for (int i = 0; i < list.size(); i++) {
    System.out.println( list.get(i) );
    }

    package Class;
    import java.util.ArrayList;
    public class ArrayListMethod {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
    
            //添加方法
            list.add("Jack");
            list.add("Ben");
            list.add("Alice");
            list.add("David");
            list.add("Dickson");
            System.out.println(list);
    
            //从集合中获取元素,get方法。索引值从0开始
            String name = list.get(2);
            System.out.println("The third person is " +name);
    
            //从集合中删除元素,remove方法。索引值从0开始
            String nameRemoved = list.remove(1);
            System.out.println("The name who was removed is " + nameRemoved);
            System.out.println(list);
    
            //获取list的长度
            int size = list.size();
            System.out.println("The length of this list is " + size);
    
            //遍历list
            for (int i = 0; i < list.size(); i++) {
                System.out.println("Number" + (i+1)+ " is " + list.get(i));
            }
        }
    }
    
    
  6. 包装类

    ArrayList不能直接使用基本数据类型,必须使用基本类型对应的包装类。

    基本类型包装类
    byteByte
    shortShort
    intInteger
    longLong
    floatFloat
    doubleDouble
    charCharacter
    booleanBoolean
    package Class;
    
    import java.util.ArrayList;
    
    public class ArrayListDemo1 {
        public static void main(String[] args) {
            //ArrayList不能直接使用基本数据类型
            //必须使用基本类型对应的包装类
    
            //Integer包装类
            ArrayList<Integer> list1 = new ArrayList<>();
    
            for (int i = 0; i < 20; i++) {
                list1.add(10*(i+1));
            }
            System.out.println(list1);
    
            //Character包装类
            ArrayList<Character> list2 = new ArrayList<>();
            for (int i = 0; i < 26; i++) {
                list2.add((char)('a'+i));
            }
            System.out.println(list2);
        }
    }
    
    

    从JDK1.5+开始,支持自动装箱、自动拆箱

    自动装箱:把基本类型赋值给包装类型

    自动拆箱:把包装类型赋值给基本类型

练习

1.生成n个1~33之间的数,添加到集合中并遍历集合
package Class;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

//Q:生成n个1~33之间的数,添加到集合中并遍历集合
public class ArrayuListDemo1 {
    public static void main(String[] args) {
        Random r = new Random();
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> list = new ArrayList<>();

        int times = sc.nextInt();
        for (int i = 0; i < times; i++) {
            list.add(r.nextInt(33)+1);
        }
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println(list);
    }
}

2.自定义4个学生对象,并添加到集合中
package Class;

import java.util.ArrayList;

//自定义4个学生对象,并添加到集合中
public class ArrayListDemo2 {
    public static void main(String[] args) {
        ArrayList<Person> stu = new ArrayList<>();

        Person one = new Person("Jack", 15);
        Person two = new Person("John", 16);
        Person three = new Person("Alice", 18);
        Person four = new Person("may", 22);

        stu.add(one);
        stu.add(two);
        stu.add(three);
        stu.add(four);

        for (int i = 0; i < stu.size(); i++) {
            System.out.println(stu.get(i).getAge());
            System.out.println(stu.get(i).getName());
            stu.get(i).show();
        }
    }
}

3.自定义一个打印ArrayList的方法,格式{a@b@c@}
package Class;

import java.util.ArrayList;

//
public class ArrayListDemo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();

        list.add("Jack");
        list.add("Ben");
        list.add("Alice");
        list.add("David");
        list.add("Dickson");

        print(list);
    }
    //定义新方法
    public static void print(ArrayList<String> list){
        System.out.print("{");
        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i);
            if(i == list.size() -1)
                System.out.println(name + "}");
            else
                System.out.print(name + "@");
        }
        return;
    }

}

4.用一个大集合存入20个随机数字,然后筛选出其中的偶数元素,放到小集合中。要求使用自定义方法完成
package Class;

import java.util.ArrayList;
import java.util.Random;

public class ArrayListDemo4 {
    public static void main(String[] args) {
        Random r = new Random();
        ArrayList<Integer> list1 = new ArrayList();

        for (int i = 0; i < 20; i++) {
            list1.add(r.nextInt(100)+1);
        }
        System.out.print("The original ArrayList is ");
        System.out.println(list1);
        ArrayList<Integer> receive = findEvenNumber(list1);
        System.out.print("The return ArrayList is ");
        System.out.println(receive);
    }
    public static ArrayList<Integer> findEvenNumber(ArrayList<Integer> list){
        ArrayList<Integer> res = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i) % 2 == 0)
                res.add(list.get(i));
        }
        return res;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值