Java基础知识之数组、集合类、泛型、多线程、文件处理

本文介绍了Java中数组和集合类的区别,特别是ArrayList和自定义泛型集合类的效率比较。接着,探讨了多线程的三种实现方式,包括继承Thread、实现Runnable接口和匿名类。最后,讲解了File类在文件处理中的应用,如文件读取和内容检索。
摘要由CSDN通过智能技术生成

一、数组和集合类的区别

数组的长度是不可变的,如果初始长度过大,则会造成内存的浪费,降低性能,而数组初始长度过小时,又无法满足大量数据的存储。这时候就需要集合类(ArrayList)来进行数组扩容等操作,同时列表还可以包含批量删除、修改等便捷操作。

(一)Java数组的声明方式与C语言略有不同,有两种格式:

类型 数组名[]
类型 [] 数组名

int a[], b;  声明一个数组a和单个变量b
int[] a, b;  声明数组a和数组b

同时声明数组时也可以进行初始化:

静态初始化:public String musname[]={
   "coffee","tea"};
动态初始化:public String musname[]=new String[2];

数组声明时只能在动态、静态中选择一种方式进行初始化。数组属于引用型变量,数组变量中存放着数组的首元素的地址,通过数组变量的名字加索引使用数组元素。

(二)集合类List、ArrayList——封装数组的类

1、Java的列表是一个类,这个类中包含数组,也包含各种处理数组的方法,同时还有必要的get方法以取出保存的数组,Java自带了集合:java.util.ArrayList类(父类是List)。
为了更好理解底层原理,我们先自己定义一个集合类,集合类至少应包括添加元素、获取数组、获取长度等功能。在定义集合类之前,我们先考虑这样一个问题:对于不同的数据类型,如果我们想要使用集合,就需要创建不同数据类型的集合来存取,而如果我们使用Object类来创建初始数组,那么数据类型的元素都可以存进数组里,比如String、Integer等。
首先,自定义一个集合类:

/**
 * Created by DYB on 2022/11/9.
 * 自定义定义一个集合类
 * 基本功能:集合类至少应包括添加元素、获取数组、获取长度等功能
 * name:MyList
 * Parameters:
 *     size:记录列表的长度
 *     array:类型为Object、长度为0的初始数组
 * function:
 *     public Object[] getArray(){}:往列表中增加一个元素
 *     public int getSize(){}:获取集合的长度
 */
public class MyList {
   
    private int size=0;
    private Object[] arry=new Object[0];

    //向列表中增加一个元素
    public void add(Object obj){
   
        Object[] newarry=new Object[arry.length+1];
        for (int i=0;i<arry.length;i++){
   
            newarry[i]=arry[i];
        }
        newarry[arry.length]=obj;
        arry=newarry;
        size++;
    }

    //获取数组
    public Object[] getArray(){
   
        return arry;
    }

    public int getSize(){
   
        return size;
    }

}

启动类中声明一个自定义集合类的对象,并模拟元素添加:

/**
 * Created by DYB on 2022/11/4.
 */
public class TestSpring {
   
    public static void main(String[] args) {
   

        MyList list=new MyList();
        System.out.println("list列表的长度为:"+list.getSize());
        int a=10;
        list.add(a);
        list.add(a);
        String b="abc";
        list.add(b);
        list.add(b);
        System.out.println("list列表的长度为:"+list.getSize());
        for (int i=0;i<list.getSize();i++){
   
            System.out.print(list.getArray()[i] +" ");
        }
    }
}

运行结果:
在这里插入图片描述
从结果可以看到,我们声明了一个集合类,由于原始数组采用Object类,因此在一个集合中可以存放不同类型的数据。

2、泛型的出现:现在,我们考虑这样一个问题:实际工作中,我们往往需要一个数组里的元素都是同一个数据类型的,比如String,或者是我们定义的其他类。那么如何在集合类中实现对数据类型的控制呢?这就是泛型的作用了!
泛型:其符号是“<>”。我们可以在类名后加上< E >或者< T >等,其中的字母相当于将类型参数化,就是将类型作为参数传入到方法,这样我们创建List时可以通过泛型限制传入的元素,当出现不符合预期的元素时编译器便会报错。
自定义一个泛型集合类:

/**
 * Created by DYB on 2022/11/10.
 * 自定义一个泛型集合类
 */
public class FanList<T> {
   
    private int size=0;
    private Object[] array=new Object[0];

    public void add(T element){
   
        Object[] newarray=new Object[array.length+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值