Java 自定义ArrayList

Java 自定义ArrayList

在进一步进行之前,让我们快速地回顾一下 数组ArrayList 的概念。在java中,我们已经看到数组是线性数据结构,提供了在内存地址空间中连续添加元素的功能,而ArrayList是一个属于集合框架的类。作为一个优秀的程序员,尽管知道这两者之间的区别,但已经知道使用ArrayList而不是数组。现在,即使是ArrayList,也有一个功能可以传递元素的数据类型,这些元素应该被存储在ArrayList中,无论是对象、字符串、整数、double、浮点数等等。

语法

Arraylist<DataType> al = new ArrayList<Datatype> ;

注意: Java中的ArrayList(相当于C++中的向量)具有动态大小。它可以根据大小缩减或扩展。ArrayList是集合框架的一部分,存在于java.util包中。

语法

ArrayList <E> list = new ArrayList <> ();

这里重要的是,E在这里代表一个对象数据类型,想象一下,这里是 Integer 。Integer类将一个原始类型 int 的值包装在一个对象中。一个Integer类型的对象包含一个类型为int的单一字段。在前进之前,请先了解一下java中封装类的概念,因为如果我们清楚地知道自动装箱和拆箱的概念,它将在后端使理解更加清晰。这是因为在对列表中的元素进行操作时,它们的语法会有所不同,所以对概念的掌握会有所欠缺,假设考虑一个向自定义ArrayList添加元素的场景,并注意它们之间语法的差异。

语法

ArrayList<Integer> **al** = new Arraylist<Integer>() ;
**al.add(1)** ;

语法

ArrayList alobj = new Arraylist() ;
alobj(new Integer(1));

让我们举一个例子来感知,下面提供的例子如下。

示例

Java中的自定义ArrayList

在这里,我们有所有相同类型的元素,一般来说,我们经常使用。现在让我们提出同样的图示流程,ArrayList简单地支持多个数据,其方式如图所示。

Java中的自定义ArrayList

在上面的ArrayList中,我们可以清楚地看到,被存储的元素是不同的类型。因此,它确实爆发了 的概念,限制在一个单一的类型,不仅如此,List还为我们提供了灵活性,可以根据我们的类型制作List,我们可以在ArrayList中访问什么类型的数据。这种列表被称为java中的自定义ArrayList 。 自定义ArrayList具有基于用户需求的属性,并且可以有超过一种类型的数据。这些数据是由一个自定义的内部类提供的,它是由各种原始对象数据类型组合而成的。

实现: 考虑一个案例,当我们必须接受 N 个学生的输入,细节是。

  • 卷号
  • 姓名
  • 分数
  • 电话

假设我们不知道java中自定义Arraylist的概念,那么我们就会制作下面列出的单个ArrayLists。我们定义了4个ArrayLists并在每个ArrayLists中保存相应的数据。

ArrayList<Integer> roll = new ArrayList<>();  // roll number
 ArrayList<String> name = new ArrayList<>(); // name
ArrayList<Integer> marks = new ArrayList<>(); //  marks
ArrayList<Long> phone = new ArrayList<>();  // phone number 

现在,我们将在每个人身上进行迭代来获取学生数据,这在更大程度上增加了我们程序的时间复杂性,如下图所示。

for (int i = 0; i < n; i++) 
{

    // Adding all the values to each arraylist
    // each arraylist has primitive datatypes

    roll.add(rollnum_i);
    name.add(name_i);
    marks.add(marks_i);
    phone.add(phone_i);
}

现在让我们在上面所学的概念的帮助下,通过实现同样的内容。因此,为了构建我们的自定义ArrayList,请执行下面列出的步骤。

过程: 构建自定义ArrayList如下。

  1. 建立一个ArrayList对象,并将其类型定为类数据。
  2. 定义一个类,并将所需的实体放在构造函数中。
  3. 将这些实体链接到全局变量。
  4. 从ArrayList中收到的数据是那个存储多个数据的类的类型。

例子

// Java program to illustrate Custom ArrayList
 
// Importing ArrayList class from java.util package
import java.util.ArrayList;
 
// Class 1
// Outer class
// Main class
// CustomArrayList
class GFG {
 
    // Custom class which has data type class has
    // defined the type of data ArrayList
    // size of input 4
    int n = 4;
 
    // Class 2
    // Inner class
    // The custom datatype class
    class Data {
 
        // Global variables of the class
        int roll;
        String name;
        int marks;
        long phone;
 
        // Constructor has type of data that is required
        Data(int roll, String name, int marks, long phone)
        {
 
            // Initialize the input variable from main
            // function to the global variable of the class
 
            // this keyword refers to current instance
            this.roll = roll;
            this.name = name;
            this.marks = marks;
            this.phone = phone;
        }
    }
 
    // Method 1
    // Main driver method
    public static void main(String args[])
    {
 
        // Custom input data
        int roll[] = { 1, 2, 3, 4 };
        String name[]
            = { "Shubham", "Atul", "Ayush", "Rupesh" };
        int marks[] = { 100, 99, 93, 94 };
        long phone[] = { 8762357381L, 8762357382L,
                         8762357383L, 8762357384L };
 
        // Creating an object of the class
        GFG custom = new GFG();
 
        // Now calling function to add the values to the
        // arraylist
        custom.addValues(roll, name, marks, phone);
    }
 
    public void addValues(int roll[], String name[],
                          int marks[], long phone[])
    {
        // local custom arraylist of data type
        // Data having (int, String, int, long) type
        // from the class
        ArrayList<Data> list = new ArrayList<>();
 
        for (int i = 0; i < n; i++) {
            // create an object and send values to the
            // constructor to be saved in the Data class
            list.add(new Data(roll[i], name[i], marks[i],
                              phone[i]));
        }
 
        // after adding values printing the values to test
        // the custom arraylist
        printValues(list);
    }
 
    // Method 2
    // To print the values
    public void printValues(ArrayList<Data> list)
    {
 
        // list- the custom arraylist is sent from
        // previous function
 
        for (int i = 0; i < n; i++) {
 
            // Data received from arraylist is of Data type
            // which is custom (int, String, int, long)
            // based on class Data
            Data data = list.get(i);
 
            // Print and display custom ArrayList elements
            // that holds for student attribute
 
            // Data variable of type Data has four primitive
            // datatypes roll -int name- String marks- int
            // phone- long
            System.out.println(data.roll + " " + data.name
                               + " " + data.marks + " "
                               + data.phone);
        }
    }
}

输出

1 Shubham 100 8762357381
2 Atul 99 8762357382
3 Ayush 93 8762357383
4 Rupesh 94 8762357384

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程