Maison > Java > javaDidacticiel > Comment implémenter une classe ArrayList personnalisée en Java

Comment implémenter une classe ArrayList personnalisée en Java

王林
Libérer: 2023-06-03 08:55:03
avant
1586 Les gens l'ont consulté

1. Idée globale d'implémentation

Lors de la personnalisation de la classe ArrayList, vous devez réfléchir à de nombreux aspects à l'avance

1 L'ArrayList doit hériter de l'interface parent List

2.

3. Besoin Propriétés et méthodes utilisées : tableau elementData qui stocke spécifiquement les données. Étant donné que le type de données des données stockées n'est pas certain, le type de données du tableau est défini comme Object. Un nombre de variables membres est nécessaire pour enregistrer le nombre. d'éléments dans le tableau.

4. Fournir une méthode de construction sans paramètres et une méthode de construction avec paramètres

5 Modifier le contenu de la méthode en fonction des besoins

2. Ajouter une méthode

Il existe deux méthodes, l'une avec un seul paramètre formel. méthode, l'autre est la méthode avec deux paramètres formels

La méthode add avec un seul paramètre formel

Cette méthode joue le rôle d'ajout, en ajoutant les éléments passés au tableau déjà défini

@Override
    public boolean add(Object o) {
    // 将传入的数据o放入数组中,该count是指代元素的个数
        elementData[count] = o;
    // 添加完成后需要将count加1
        count++;
        return true;
    }
Copier après la connexion

Form Il existe deux méthodes d'ajout

Le premier paramètre de cette méthode est la position qui doit être insérée, et le deuxième paramètre est le contenu qui doit être inséré

@Override
    public void add(int index, Object element) {
        // todo 在指定位置插入元素
        for (int i = count; i >index; i--) {
            elementData[i]=elementData[i-1];
        }
        elementData[index]=element;
    }
Copier après la connexion

Comment implémenter une classe ArrayList personnalisée en Java

3. Méthode Size

Cette méthode renvoie la longueur de l'ensemble, qui est un tableau La longueur est liée au nombre défini au début

@Override
    public int size() {
        return count;
    }
Copier après la connexion

4. Méthode isEmpty

Cette méthode n'a besoin que de juger le nombre Si le nombre est 0, cela signifie que le tableau est vide

@Override
    public boolean isEmpty() {
        return count==0;
    }
Copier après la connexion

5. Méthode de construction

Dans la méthode de construction Initialisez le tableau et définissez la longueur du tableau

    public ArrayList(Object[] eleArr) {
        this.elementData = eleArr;
    }

    public ArrayList() {
        // todo 初始化数组的长度
        elementData = new Object[10];
    }
Copier après la connexion

6. Code global de l'ArrayList

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ArrayList implements List {
    /*
     * 自定义实现ArrayList
     * 1、要实现List接口
     * 2、思考该类抽象出哪些属性-->数组用于保存元素的值elementData,数据类型为Object,用于计数的全局变量count
     * 3、思考方法--一个全参的构造方法,一个不带参的构造方法
     * 4、根据具体需求来实现具体的方法
     * */
    Object elementData[];
    int count;  // TODO  数组中的元素个数


    @Override
    public void add(int index, Object element) {
        // todo 在指定位置插入元素
        for (int i = count; i >index; i--) {
            elementData[i]=elementData[i-1];
        }
        elementData[index]=element;
    }

    @Override
    public boolean add(Object o) {
        elementData[count] = o;
        count++;
        return true;
    }

    public ArrayList(Object[] eleArr) {
        this.elementData = eleArr;
    }

    public ArrayList() {
        // todo 初始化数组的长度
        elementData = new Object[10];
    }

    @Override
    public int size() {
        return count;
    }

    @Override
    public boolean isEmpty() {
        return count==0;
    }

    @Override
    public boolean contains(Object o) {
        return false;
    }

    @Override
    public Iterator iterator() {
        return null;
    }

    @Override
    public Object[] toArray() {
        return new Object[0];
    }


    @Override
    public boolean remove(Object o) {
        return false;
    }

    @Override
    public boolean addAll(Collection c) {
        return false;
    }

    @Override
    public boolean addAll(int index, Collection c) {
        return false;
    }

    @Override
    public void clear() {

    }

    @Override
    public Object get(int index) {
        return elementData[index];
    }

    @Override
    public Object set(int index, Object element) {
        return null;
    }



    @Override
    public Object remove(int index) {
        return null;
    }

    @Override
    public int indexOf(Object o) {
        return 0;
    }

    @Override
    public int lastIndexOf(Object o) {
        return 0;
    }

    @Override
    public ListIterator listIterator() {
        return null;
    }

    @Override
    public ListIterator listIterator(int index) {
        return null;
    }

    @Override
    public List subList(int fromIndex, int toIndex) {
        return null;
    }

    @Override
    public boolean retainAll(Collection c) {
        return false;
    }

    @Override
    public boolean removeAll(Collection c) {
        return false;
    }

    @Override
    public boolean containsAll(Collection c) {
        return false;
    }

    @Override
    public Object[] toArray(Object[] a) {
        return new Object[0];
    }

}
Copier après la connexion

7. Test de la classe de test

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("111");
        arrayList.add("2222");
        arrayList.add("3333");
        System.out.println("集合中总共多少个元素:"+arrayList.size());
        System.out.println("集合是否为空?"+arrayList.isEmpty());
        System.out.println("集合第三个元素:"+arrayList.get(2));
        arrayList.add(2,"新加的");
        System.out.println("集合第三个元素:"+arrayList.get(2));
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal