java - 用于按索引存储对象的 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标准库中有这样的东西吗?
解决方案
你可能需要一张地图。但它不会自动生成索引这取决于你。
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/
推荐阅读
- javascript - 如何在按钮单击时显示标题元素?
- java - 集群模式下的自动故障转移处理已禁用 Redis ElastiCache
- sql - 更改最后 2 个数字以防万一
- amazon-ecs - 如何为 Amazon ECS 中的每个任务实例分配唯一 ID
- akamai - 是否有 Akamai 调试标头可用于确定缓存标记是否以及何时被清除/无效/删除?
- python - 将数据加载到 BigQuery 时遇到错误字符 (ASCII 0)
- bots - Bot Dialogflow - 我可以在聊天框中显示实体列表吗?
- python - KeyError:在 Python 中写入文件时
- django - 迁移不会在数据库中创建列
- python - django celery kombu.exceptions.EncodeError