关于Java';s LinkedList类
我有一个关于Java中LinkedList类的问题。 我有一个场景,需要根据linkedlist中是否存在索引来添加或设置索引。我想要实现的一个伪代码是-- 我确实浏览了LinkedList类的Javadocs,但没有发现任何相关内容 有什么想法吗 谢谢 p1ng使用一个关于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");
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);