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


    一、数组和集合类的区别

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

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

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

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

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

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

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

    (二)集合类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;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

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

    /**
     * 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] +" ");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    运行结果:
    在这里插入图片描述
    从结果可以看到,我们声明了一个集合类,由于原始数组采用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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    Caliburn.Micro框架学习笔记——事件总线机制
    【conda】——pack打包32位python,在服务器报 no such file
    软件工程第十一周
    【云原生之kubernetes实战】kubernetes集群的检测工具——popeye
    MySQL 安装与调试
    vector模拟(C++)和注意问题
    测试用例的八大基本准则
    东华大学 2022 oj c++ 无超纲写法 素数表
    《文化相对论》圆满收官!思想交锋,文明互鉴!
    Windows安装ElasticSearch
  • 原文地址:https://blog.csdn.net/thinkpading/article/details/127762741