Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java';s LinkedList类_Java_Linked List - Fatal编程技术网

关于Java';s LinkedList类

关于Java';s LinkedList类,java,linked-list,Java,Linked List,我有一个关于Java中LinkedList类的问题。 我有一个场景,需要根据linkedlist中是否存在索引来添加或设置索引。我想要实现的一个伪代码是-- 我确实浏览了LinkedList类的Javadocs,但没有发现任何相关内容 有什么想法吗 谢谢 p1ng使用一个 Map<Integer, String> map = new HashMap<Integer, String>(); // ... int a = 5; map.put(a, "arbit");

我有一个关于Java中LinkedList类的问题。 我有一个场景,需要根据linkedlist中是否存在索引来添加或设置索引。我想要实现的一个伪代码是--

我确实浏览了LinkedList类的Javadocs,但没有发现任何相关内容

有什么想法吗

谢谢 p1ng

使用一个

Map<Integer, String> map = new HashMap<Integer, String>();

// ...

int a = 5;

map.put(a, "arbit");
Map Map=newhashmap();
// ...
INTA=5;
地图。放置(a,“arbit”);

即使
a
已经存在,
put
也只会替换旧字符串。

在链表中搜索不是很有效(O(n))。您是否考虑过使用不同的数据结构,例如HashMap,它会给您O(1)访问时间?

LinkedList内部不能有洞,所以您不能让list
[1,2,3,4]
然后
ll.add(10,10)
,所以我认为您的示例有问题。使用
映射
或搜索其他稀疏数组

如果您需要顺序访问和键控访问,您可能希望尝试LinkedHashMap,从1.4.2开始提供
Map
绝对是一个好的(最好的?)方法

如果出于某种奇怪的原因,需要使用
LinkedList
,这里有一个选项。它具有可怕的运行时性能,并且不允许null,因为null现在成为索引未被占用的指示器

String toInsert = "arbit";
int a = 5;

//grow the list to allow index a
while ( a >= ll.size() ) {
   ll.add(null);
}

//set index a to the new value
ll.set(a, toInsert);
如果你要走这条糟糕的路,你最好使用
ArrayList


为什么这么糟糕?假设索引100000处只有一个元素。此实现需要列表中100000个指向
null
的条目。这会导致糟糕的运行时性能和内存使用。

看起来您试图使用
a
作为键,并且没有说明索引
i
中是否有项。如果在
ll.size()听起来像是想要java.util.Set而不是LinkedList时运行代码。。。。或者是一个?有索引的LinkedList是可能的,但是LinkedList的概念使得索引变得不必要。如果您需要索引,您应该使用其他索引。Java中的关联数组是映射,因此我同意Bart的观点,映射可能是您最好的选择。为了帮助您进一步研究这一点,您正在寻找
稀疏数组
实现:谢谢大家,但后来我意识到Hashmap实现在很多方面都会有所帮助。ArrayList不能有“漏洞”@Mark Peters:谢谢,我忘记了。您可以通过使用特殊值来表示“未占用的”(
private static final String EMPTY=new String();
)来允许
null
)。但是,您可能希望将代码封装到一个类中来封装它,老实说,如果您走得那么远,您应该使用更合适的数据结构。
String toInsert = "arbit";
int a = 5;

//grow the list to allow index a
while ( a >= ll.size() ) {
   ll.add(null);
}

//set index a to the new value
ll.set(a, toInsert);