匿名对象-ArrayList

这篇博客介绍了Java中的匿名对象概念,强调其一次性使用的特性,并通过实例展示了如何使用匿名对象作为方法参数。接着讲解了`Random`类生成随机数的方法及练习。然后讨论了对象数组和ArrayList集合,包括其优点、泛型使用以及常用方法。博客还提供了多个ArrayList的实战练习,如生成随机数、储存对象、自定义打印格式以及筛选偶数元素等。

匿名对象

  • 创建对象的标准格式:

类名称 对象名 = new 名称();

  • 匿名对象

只有右边的对象,没有左边的名字和赋值运算

new 类名称();

**注意事项:**匿名对象只能使用唯一一次,下次再用不得不再创建一个新对象

使用建议:如果确定一个对象只需要使用唯一一次,就可以使用匿名对象

package Demo04;

public class Person {

    String name;

    public  void  showName(){
        System.out.println("我叫:" + name);
    }
}
package Demo04;

public class Demo16Anonymous {
    public static void main(String[] args) {
        //左边的是对象的名字
        Person one = new Person();
        one.name = "小明";
        one.showName(); //我叫小明


        //匿名对象
        new Person().name = "小红";
        new Person().showName(); //我叫:null
    }

}
使用匿名对象作为方法的参数
package Demo04;

import java.util.Scanner;

public class Demo17 {
    public static void main(String[] args) {
        //普通使用方式
//        Scanner sc = new Scanner(System.in);
//        int num = sc.nextInt();

//        //匿名对象方式
//        int num = new Scanner(System.in).nextInt();
//        System.out.println("输入的是:" + num);

//        //使用一般写法传入参数
//        Scanner sc = new Scanner(System.in);
//        methodParam(sc);

        //使用匿名对象进行传参
        methodParam(new Scanner(System.in));
        Scanner sc = methodReturn();
        int num = sc.nextInt();
        System.out.println("输入的是:" + num);

    }

    public static void methodParam(Scanner sc){
        int num = sc.nextInt();
        System.out.println("输入的是:" + num);

    }

    public static Scanner methodReturn(){
//        Scanner sc = new Scanner(System.in);
//        return sc;
        return new Scanner(System.in);

    }
}

Random(生成随机数字)

  • 使用步骤

    1. 导包

    import java.util.Random;

    1. 创建

    Random r = new Random( ); //小括号中留空即可

    1. 使用
    • 获取一个随机的int数字(范围是int所有范围,有正负两种):int num = r.nextInt( )

    • 获取一个随机的int数字(参数代表了范围,左闭右开区间),int num = r.nextInt(3)

      ​ 实际上代表的含义是:[0.3) ,也就是0-2

package Demo06;

import java.util.Random;

public class Demo01Random {
    public static void main(String[] args) {
        Random r = new Random();

        int num = r.nextInt();
        System.out.println("随机数是:" + num);
    }
}
package Demo06;

import java.util.Random;

public class Demo02Random {
    public static void main(String[] args) {
        Random r = new Random();

        for (int i = 0; i < 100; i++) {
            int num = r.nextInt(10); //范围实际上是0-9
            System.out.println(num);
        }
    }
}
练习1生成1-n

题目要求:根据一个int变量n的值,来获取随机数字,范围是[1,n],可以取到1也可以取到n

思路:

  1. 定义一个int变量n,随意赋值
  2. 要使用Random:三个步骤,导包,创建,使用
  3. 如果写10,那么就是0-9,然而想要的是1-10,所以整体+1即可
  4. 打印随机数字
package Demo06;

import java.util.Random;

public class DemoRandom {
    public static void main(String[] args) {
        int n= 5;
        Random r = new Random();

        for (int i = 0; i < 100; i++) {
            int result = r.nextInt(n) + 1;
            //本来范围0到n-1,【整体】+1之后变成了1-n
            System.out.println(result);
        }

    }
}
练习2

题目:用代码模拟猜数字小游戏

思路:

  1. 首先需要产生一个数字,并且一旦产生不再变化。用Random 的nextInt方法

  2. 需要键盘输入,需要用到Scanner

  3. 获取键盘输入的数字,用Scanner当中的nextInt方法

  4. 已经得到了两个数字,判断(if)一下,

    如果太大,提示太大,并且重试

    如果太小,提示太小,并且重试

    如果猜中,游戏结束

  5. 重试就是再来一次,循环,但是循环次数不确定,用while(true)死循环

package Demo06;

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

public class Demo04RandomGame {

    public static void main(String[] args) {
        Random r = new Random();
        int randomNum = r.nextInt(100) + 1; //这是范围1-100
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请输入你猜测的数字:");
            int guessNum = sc.nextInt(); //键盘输入猜测的数字

            if (guessNum > randomNum) {
                System.out.println("太大了,请重试");
            } else if (guessNum < randomNum) {
                System.out.println("太小了,请重试");
            } else {
                System.out.println("恭喜你,猜中了");
                break; //如果猜中,不再重试
            }
        }
        System.out.println("游戏结束");
    }
}

对象数组

题目:定义一个数组,用来储存3个person对象

  • 但是数组有一个缺点:一旦创建,程序运行期间长度不可以发生改变。
package Demo07;


import Demo05.Person;

public class Demo01 {
    public static void main(String[] args) {
        //首先创建一个长度为三的数组,里面用来存放person类型的对象
        Demo01Array[] array = new Demo01Array[3];

        Demo01Array one = new Demo01Array("小红",18);
        Demo01Array two = new Demo01Array("小明",28);
        Demo01Array three = new Demo01Array("小军",38);

        //将one当中的地址值赋值到数组的0号元素位置
        array[0] = one;
        array[1] = two;
        array[2] = three;

        System.out.println(array[0]); //地址值@4554617c

        Demo01Array person = array[1];
        System.out.println(person.getName()); //小明


    }
}

ArrayList集合

  • 数组长度不可以发生改变,但是ArrayList长度是可以改变的
  • 对于ArrayList来说,有一个尖括号 < E> 代表泛型
  • 泛型,也就是装在集合当中的所有元素,全都是同意的什么类型
  • 注意:泛型只能是引用类型,不能是基本类型
  • 对于ArrayList集合来说,直接打印得到的不是地址值,而是内容,如果内容是空,得到的是空的中括号
package Demo07;

import java.util.ArrayList;

public class Demo02ArrayList {
    public static void main(String[] args) {
        //创建一个ArrayList集合,集合名称是List,里面装的全都是String字符串类型的数据
        //从JDK1.7+开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写的
        ArrayList<String>list = new ArrayList<>();
        System.out.println(list);  //[]

        //向集合中加一些数据
        list.add("小红");
        System.out.println(list);  //[小红]

        list.add("小明");
        list.add("小军");
        System.out.println(list);  //[小红, 小明, 小军]
        
        //list.add(100);  
        //错误写法!因为创建的时候尖括号泛型已经说了是字符串,添加进去的而元素就必须都是字符串才行
    }
}
ArrayList的常用方法
  1. public bollean add(E e): 向集合中添加元素,参数的类型和泛型一致。返回值代表添加是否成功

    备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用

  2. public E get(int index): 从集合中获取元素,参数是索引编号,返回值就是对应位置的元素

  3. public E remove(int index): 从集合当中删除元素,参数是索引编号,返回值就是被删掉的元素

  4. public int sive( ): 获取集合大的尺寸长度,返回值是集合中包含的元素个数

package Demo01;

import java.util.ArrayList;

public class Demo01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        System.out.println(list); //[]

        //向集合中添加元素
        boolean success = list.add("小红");
        System.out.println(list);
        System.out.println("添加的动作是否成功:" + success);

        list.add("高圆圆");
        list.add("赵又廷");
        System.out.println(list);  //[小红, 高圆圆, 赵又廷]

        //从集合中获取元素:Get.索引值从0开始
        String name = list.get(2);
        System.out.println("第二号索引位置:" + name);

        //从集合中删除元素:remove.索引值从0开始
        String whoRemoved = list.remove(2);
        System.out.println("被删除的人是:" + whoRemoved);
        System.out.println(list);


        //获取集合的长度尺寸,也就是其中的元素个数
        int size = list.size();
        System.out.println("集合的长度是:" + size);
    }
}
package Demo01;

import java.util.ArrayList;

public class Demo02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("小红");
        list.add("小白");
        list.add("小军");

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

    }
}
ArrayList集合储存基本数据
  • 如果希望向集合ArrayList当中储存基本类型数据,必须使用基本类型对应的包装类

基本类型 包装类(引用类型,包装类都位于java.long包下)

byte Byte

short Short

int Integer 【特殊】

long Long

float Float

double Double

char Character 【特殊】

boolean Boolean

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

自动装箱:基本类型 ==》包装类型

自动拆箱:包装类型==》基本类型

ArrayList练习1
  • 生成6个1-33的随机整数,添加到集合,并遍历集合

思路:

  1. 需要存储6个数字,创建一个集合。 < Integer>
  2. 产生随机数,用Random
  3. 循环6次,来产生6个随机数字:for循环
  4. 循环内调用r.nextInt(int n),参数是33,0-32,整体加1才是1-33
  5. 把数字添加到集合中:add
  6. 遍历集合:for size get
package Demo01;

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

public class Demo04 {
    public static void main(String[] args) {
        ArrayList<Integer>list = new ArrayList<>();
        Random r = new Random();
        for (int i = 0; i < 6; i++) {
            int num = r.nextInt(33) + 1;
            list.add(num);

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

        }
    }
}
ArrayList练习2
  • 自定义4个学生对象,添加到集合,并遍历

思路:

  1. 自定义sudent学生类:四个部分:
  2. 创建一个集合用来存储学生对象。泛型< Student>
  3. 根据类,创建四个学生对象
  4. 将4个学生对象添加到集合中:add
  5. 遍历集合 for size get
package Demo01;

public class Student {

    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;
    }
}
package Demo01;

import java.util.ArrayList;

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

        Student one = new Student("洪七公",20);
        Student two = new Student("一灯大师",21);
        Student three = new Student("郭靖",22);
        Student four = new Student("黄蓉",23);

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

        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println("姓名:" + stu.getName() + ",年龄" + stu.getAge());

        }

    }
}
ArrayList练习3
  • 定义以指定格式打印集合的方法(ArrayList作为参数),使用{}扩起集合,使用@分隔每个元素,格式参照{元素@元素@元素}。
System.out.println(list);  [10,20,30]
printArray(list);		[10@20@30]

定义方法的三要素

  1. 返回值类型:只是进行打印而已,没有运算,没有结果,所以用void
  2. 方法名称:printArrayList
  3. 参数列表:ArrayList
package Demo01;

import com.sun.org.apache.bcel.internal.generic.ARRAYLENGTH;

import java.util.ArrayList;

public class Demo06 {
    public static void main(String[] args) {
        ArrayList<String>list = new ArrayList<>();
        list.add("张三丰");
        list.add("宋远桥");
        list.add("张无忌");
        list.add("张翠山");
        System.out.println(list); //[张三丰, 宋远桥, 张无忌, 张翠山]

        printArrayList(list);
    }

    public static void printArrayList(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 + "@");
            }


        }
    }
}
ArrayList练习4
  • 用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合中

思路:

  1. 需要创建一个集合,用来储存int数字:< Integer>
  2. 随机数字就用Random nextInt
  3. 循环20次,把随机数字放入大集合:for循环,add方法
  4. 自定义一个方法,用来进行筛选

筛选:根据大集合,筛选符合要求的元素,得到小集合

三要素:

返回值类型:ArrayList小集合(里面元素不确定)

方法名称:getSmallList

参数列表:ArrayList大集合(装着20个随机数字)

  1. 判断 if 是偶数:num % 2 = 0
  2. 如果是偶数,就放到小集合中,否则不放
package Demo01;

import javax.lang.model.type.ArrayType;
import java.util.ArrayList;
import java.util.Random;

public class Demo07 {
    public static void main(String[] args) {
        ArrayList<Integer> bigList = new ArrayList<>();
        Random r = new Random();
        for (int i = 0; i < 20; i++) {
            int num = r.nextInt(100) + 1;  //1-100
            bigList.add(num);
        }
        ArrayList<Integer> SmallList = getSamllList(bigList);
        System.out.println("偶数共有多少个:" + SmallList.size());
        for (int i = 0; i < SmallList.size(); i++) {
            System.out.println(SmallList.get(i));

        }
    }
    //这个方法,接收大集合参数,返回小集合结果
    public static ArrayList<Integer> getSamllList(ArrayList<Integer> bigList) {
        //创建一个小集合
        ArrayList<Integer> SamllList = new ArrayList<>();
        for (int i = 0; i < bigList.size(); i++) {
            int num = bigList.get(i);
            if (num % 2 ==0){
                SamllList.add(num);
            }

        }
        return SamllList;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值