首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于按索引存储对象的Java类

用于按索引存储对象的Java类
EN

Stack Overflow用户
提问于 2020-05-05 03:24:56
回答 2查看 154关注 0票数 0

对不起,不知道如何在标题中简单地解释它。我需要一个java类来存储自动生成增量数字的<object number, object>对。如果某个项目被删除,则该项目的编号将在下一个存储项目中重用。就像这样:

代码语言:javascript
复制
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标准库中有这样的东西吗?

EN

回答 2

Stack Overflow用户

发布于 2020-05-05 03:38:59

我猜你是在找一台ArrayList?它们会自动索引和清理,所以如果你从中间移走一个项目,下面所有的项目都会向下滑动一个索引。

一个简单的例子:

代码语言:javascript
复制
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处会有"this is a test“,在索引1处会有"this is #3”。

票数 0
EN

Stack Overflow用户

发布于 2020-05-05 03:48:48

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

代码语言:javascript
复制
Map<Integer, String> map = New HashMap<Integer,String>();
map.add(findMissingPositive(map.KeySet(), map.KeySet().size()), "New String");

您可以使用一个函数来检索键中缺失的最小数字。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61600006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档