对不起,不知道如何在标题中简单地解释它。我需要一个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标准库中有这样的东西吗?
发布于 2020-05-05 03:38:59
我猜你是在找一台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处会有"this is a test“,在索引1处会有"this is #3”。
发布于 2020-05-05 03:48:48
你可能需要的是一张地图。但它不会自动生成索引,这取决于您。
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/
https://stackoverflow.com/questions/61600006
复制相似问题