Как создать расширяемый динамический массив в Java без использования предварительно сделанных классов?

StackOverflow https://stackoverflow.com/questions/2914281

  •  04-10-2019
  •  | 
  •  

Вопрос

Да, это вопрос домашнего задания, поэтому givemetehkodezplsthx! :)

Во всяком случае, вот что мне нужно сделать:
Мне нужно иметь класс, который будет иметь среди его атрибутов массив объектов другого класса. Правильный способ сделать это, на мой взгляд, будет использовать что-то вроде linkedList, вектор или аналогичный. К сожалению, в прошлый раз я сделал это, я получил огонь и крем от своего профессора, потому что, по его вере, я использовал продвинутые вещи без понимания оснований.

Теперь следующим очевидным решением было бы создать массив с фиксированным количеством элементов и добавить проверки, чтобы получить и установить, какие увидят, будет ли массив заполнен. Если он заполнен, они создали новый крупный массив, скопируйте данные более старых массивов в новый массив и верните новый массив на звонящий. Если это в основном пусто, они создали новый меньший массив и перемещать данные из старого массива на новый. Для меня это выглядит немного глупо. Для моей домашней работы, вероятно, больше не будет больше, чтобы 3 элемента в массиве, но я хотел бы сделать масштабируемое решение, не вычисляющее вручную расчет статистики о том, как часто заполнено массив, каковы добавлены среднее количество новых элементов, затем Используя результаты расчета для расчета количества элементов в новом массиве и так далее.

Кстати, нет необходимости удалять элементы из середины массива.

Какие-нибудь советы?

Это было полезно?

Решение

class test {
    private Object[] objects;
    private int size;

    public test() {
        objects = new Object[10];
        size = 0;
    }

    public void push(Object o) {
        if (objects.length == size) {
            throw new RuntimeException("This wouldn't happen if I didn't have to reinvent the wheel");
        }
        objects[size] = o;
        size++;
    }

    public Object pop() {
        size--;
        Object o = objects[size];
        objects[size] = null;
        return o;
    }
}

Просто шучу. Я думаю, что вы лучшие ставки - это реализовать свой собственный связанный список, а затем использовать это в вашем классе. Что-то типа:

class Element {
    Object val;
    Element next;
    Element prev;

    public Element(Object val, Element next, Element prev) {
        this.val = val;
        this.next = next;
        this.prev = prev;
    }

}

class LinkedList {
    Element head;
    Element tail;

    public void add(Object o) {
        Element el = new Element(o, null, tail);
        tail.next = el;
    }

    public Object remove() {
        Element o = tail;
        tail = o.prev;
        tail.next = null;
        return o.val;
    }
}

Другие советы

Одна вещь, которую вы захотите сделать, это когда вам нужно вырастить размер вашего массива, создайте массив, который вдвое больше размера старого массива. Аналогичным образом, если вам нужно сократить размер массива HTE, только сделайте это, как только массив наполовину заполнен.

Это сделает это, чтобы вы должны сделать гораздо менее массивные копии.

Это сделает необходимым сохранить переменную, которая отслеживает фактический размер массива, потому что длина массива не будет точно представлять фактический размер.

Скопировать существующий массив на меньшее или большее, вы можете найти System#arrayCopy() полезный.

Пример Kickoff:

Object[] originalArray = new Object[3];
// ...
Object[] resizedArray = new Object[originalArray.length + 2]; // Grow with 2.
System.arrayCopy(originalArray, 0, resizedArray, 0, originalArray.length);

Это скопирует элементы по всей длине originalArray в начале resizedArray. Отказ 2 слота в конце resizedArray все еще null Так что вы можете использовать его для других предметов.

Это должно вас начать. Удачи :)

Это для класса структур данных? Похоже, ваш профессор ожидает, что вы реализовать свой собственный Связанный список Структура данных или что-то подобное вместо использования One Java предоставляет. Google и ваши текстовые книги (ы) - ваш друг.

Если я вспомнку правильно, класс ArrayList работает, имея фиксированный массив размеров (с начальной емкостью того, что вы устанавливаете), которые в значительной степени изменяются, в значительной степени показывают, что вы описали, когда он заполнен.

Вы можете использовать связанный список, хотя по звукам его профессор хочет, чтобы вы программировали этот материал самим, поэтому создайте свой собственный класс, демонстрирующий, как вы знаете, как это работает?

Я думаю, что это действительно простой способ: P, которые мы не можем сделать в C, но можем сделать в Java

package javaapplication21;

import java.util.Scanner;
public class JavaApplication21 {
    public static void main(String[] args) {
       int a;
       Scanner obj=new Scanner(System.in);
       System.out.print("Enter array size=");
       a=obj.nextInt();
       int b[]=new int[a];
       for(int i=0;i<b.length;i++){
          System.out.println(b[i]+i);
       }
   }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top