Java中是否有一个集合,它的“put”方法返回它给对象的自动索引,所以你可以及时检索/删除它?
4 回答
所有的 java.util.Map 类都包含一个put(K key, V value)
方法,该方法允许您提供一个密钥,您以后可以通过该密钥检索对象。
HashMap
您可以使用自己的扩展进行包装。您可以安全地从中删除元素,其余元素将保留其索引。
class MyHashMap<T> {
int index = 0;
HashMap<Integer, T> internalMap = new HashMap<>();
public int add(T t) {
int temp = index++;
internalMap.put(temp, t);
return temp;
}
}
如果您需要它是线程安全的,请使用AtomicInteger
forindex
和ConcurrentHashMap
for internalMap
。
在向其添加(即)元素后,您始终可以调用size()
a 。您仍然必须将返回的值减 1 才能获得元素的索引。List
add(element)
取决于您使用的集合。大多数集合会给你一个布尔值作为回报,告诉你元素是否被添加到集合中。但是由于有许多集合没有任何特定的顺序(并且在处理集合时该顺序可能会改变),因此索引将不再正确。
一些如何检索索引的示例:
// ArrayList, LinkedList (they put the new element at the end of the list)
list.add(myElement);
int index=list.size()-1;
// LinkedList , Stack... (with "push" the new element will be put at the beginning of the list)
list.push(myElement);
int index = 0;
如果集合有索引(不是地图),那么您可以通过调用检索该索引
int index = myCollection.indexOf(myElement);
编辑我忘了补充,这需要通过覆盖来实现相等测试equals(Object o)
。(谢谢穆罕默德 Gelbana)/编辑
这实际上是确保索引正确的最安全方法,即使在集合发生更改时也是如此。
但是当然有太多不同的集合具有不同的目标,以确定如何检索索引。例如,地图通常没有索引,而是您必须自己提供的“键”。
您当然可以创建自己的集合并确保始终拥有正确的索引。要么map
按照已经建议的方式实现 a ,要么使用数组:
public class MyCollection{
private E[] array;
public MyCollection<E>(){
array = new E[0];
}
public int put(E element){
// create a new array that can hold one more element
E[] copy = new E[array.length+1];
// copy the old array into a new array
int i=0;
for(;i<array.length;i++){
copy[i] = array[i];
}
copy[i]=element;
return i;
}
}