首页 > 解决方案 > 用于按索引存储对象的 Java 类

问题描述

对不起,不知道如何在标题中简要说明。我需要一个 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标准库中有这样的东西吗?

标签: javaarrayslist

解决方案


你可能需要一张地图。但它不会自动生成索引这取决于你。

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/


推荐阅读