Java класс для хранения объектов по индексу - PullRequest
0 голосов
/ 04 мая 2020

Извините, не знаю, как вкратце объяснить это в заголовке. Мне нужен класс java, в котором хранятся пары <object number, object>, автоматически генерирующие добавочные числа. Если какой-либо элемент удален, его номер будет повторно использован для следующего сохраненного элемента. Вот так:

public class SerialStorage<T>
{
    Map<Integer, T> itemsStorage;
    Queue<Integer> deletedItemsStorage;
    int lastKnownMaxNumber;

    public SerialStorage()
    {
        itemsStorage = new HashMap<>();
        deletedItemsStorage = new ArrayDeque<>();
        lastKnownMaxNumber = 0;
    }

    /*
    Stores new item and returns it's number
     */
    public int putItem(T item)
    {
        int number;
        if (deletedItemsStorage.size() > 0)
        {
            number = deletedItemsStorage.remove();
        }
        else
        {
            number = ++lastKnownMaxNumber;
        }
        itemsStorage.put(number, item);
        return (number);
    }

    /*
    Get item by it's number
     */
    public T getItem(int number)
    {
        return (itemsStorage.get(number));
    }

    /*
    Removes item and returns it. Returns null if no such item found
     */
    public T removeItem(int number)
    {
        T removedItem = itemsStorage.get(number);
        if (removedItem != null)
        {
            deletedItemsStorage.add(number);
        }
        return (removedItem);
    }
}

Есть ли что-нибудь подобное в стандартных java библиотеках?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

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

Map<Integer, String> map = New HashMap<Integer,String>();
map.add(findMissingPositive(map.KeySet(), map.KeySet().size()), "New String");

Вы можете использовать функцию, которая извлекает наименьшее число, которое отсутствует в клавишах.

static int findMissingPositive(int arr[], int size) 
    { 
        int i; 

        // Mark arr[i] as visited by making 
        // arr[arr[i] - 1] negative. Note that 
        // 1 is subtracted because index start 
        // from 0 and positive numbers start from 1 
        for (i = 0; i < size; i++) { 
            int x = Math.abs(arr[i]); 
            if (x - 1 < size && arr[x - 1] > 0) 
                arr[x - 1] = -arr[x - 1]; 
        } 

        // Return the first index value at which 
        // is positive 
        for (i = 0; i < size; i++) 
            if (arr[i] > 0) 
                return i + 1; // 1 is added becuase indexes 
        // start from 0 

        return size + 1; 
    } 

https://www.geeksforgeeks.org/find-the-smallest-positive-number-missing-from-an-unsorted-array/

0 голосов
/ 04 мая 2020

Думаю, вы ищете ArrayList? Они автоматически индексируются и очищаются, поэтому, если вы удалите элемент из середины, все следующие элементы сдвинутся на один индекс вниз.

Краткий пример:

ArrayList<String> myStrings = new ArrayList<String>();
strings.add("this is a test"); // index 0
strings.add("this is number two"); // index 1
strings.add("this is number three"); // index 2

System.out.println(strings.get(1));    
strings.remove(1);
System.out.println(strings.get(1));

После этого у вас будет «это тест» в индексе 0 и «это номер три» в индексе 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...