我一直只是一个人使用:
List<String> names = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
我使用接口作为可移植性的类型名称,因此当我问这些问题时,我可以重新编写代码.
何时应该LinkedList使用,ArrayList反之亦然?
为什么有人想在阵列上使用链表?
毫无疑问,对链接列表进行编码比使用数组要多一些工作,人们可能想知道什么是合理的额外工作.
我认为在链表中插入新元素是微不足道的,但它是数组中的一项重要工作.使用链表存储一组数据与将其存储在数组中是否还有其他优点?
这个问题不是一个重复这个问题,因为其他的问题是关于一个特定的Java类专门询问,而这个问题的关注与一般的数据结构.
- LinkedList和之间有什么区别ArrayList?什么时候最好使用LinkedList?
我认为每个Java开发人员至少在面试时都听过一次这个问题.
- 如果您希望能够在列表中间插入项目,则最好使用链接列表.
这是这个问题的常见答案.大家都知道.每当你问一个关于List实现之间差异的问题时,你会得到如下答案:
我什么时候应该使用LinkedList?什么时候需要在元素之间或开始时有效删除?
忘了提到插入费用.在LinkedList中,一旦你有正确的位置,插入成本
O(1),而在ArrayList中它会上升到O(n)- 必须移动经过插入点的所有元素.
当您希望能够在列表中间插入项目(例如优先级队列)时,链接列表优于数组.
ArrayList较慢,因为它需要复制部分数组才能删除已经空闲的插槽.LinkedList只需要操作几个引用.
和更多...
但你有没有试过自己重现它?我昨天试过并得到了这些结果:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Test {
public static void main(String... args) {
final int MAX_VAL = 10000;
List<Integer> linkedList = new LinkedList<Integer>();
List<Integer> arrayList = new ArrayList<Integer>();
for(int i = 0; i < MAX_VAL; i++) {
linkedList.add(i);
arrayList.add(i);
}
long time = System.nanoTime();
for(int i = 0; i < MAX_VAL; …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种可以轻松添加项目的数组数据类型,而不会影响性能.
Redim Preserve整个RAM从旧复制到新,与现有元素的数量一样慢我对此非常困惑.到处都写着"链表比数组更快",但是没有人愿意说出为什么.使用普通逻辑我无法理解链表如何更快.在一个数组中,所有单元格彼此相邻,因此只要您知道每个单元格的大小,就可以立即轻松到达一个单元格.例如,如果有一个包含10个整数的列表,并且我想在第四个单元格中获取该值,那么我直接进入数组的开头+24个字节并从那里读取8个字节.
另一方面,如果你有一个链表并且你想要获得第四个元素,那么你必须从列表的开头或结尾开始(取决于它是单个列表还是双列表)并从一个节点开始到另一个,直到找到你想要的东西.
那么heck如何逐步进行比直接进入元素要快?
我何时应该使用arrayList?何时应该使用LinkedList?
什么时候应该使用TreeSet,LinkedHashSet并HashSet?
我看到这篇文章:你应该使用 Linked List 吗?它指出,鉴于可用内存和 RAM 结构的技术进步,使用数组会比链表更好。
还有一个老问题何时在数组/数组列表上使用链表?
文章中的论点真的成立并且链接列表已经过时吗?或者如果论点为真,使用链接列表仍然比数组更好的场景是什么?(用例子解释任何一点都会有帮助)
K>> asdfasdf=[1 1 1]
asdfasdf =
1 1 1
K>> asdfasdf(4)=-2.3604 + 0.1536i
asdfasdf =
1.0000 + 0.0000i 1.0000 + 0.0000i 1.0000 + 0.0000i -2.3604 + 0.1536i
Run Code Online (Sandbox Code Playgroud)
为什么前3个元素突然变得复杂?我怎样才能防止Matlab这样做呢?真实是真的.这不应该只是因为另一个元素是想象的而改变为想象的.
这些代码有什么区别?
1)
struct MyStruct
{
int num;
} ms[2];
ms[0].num = 5;
ms[1].num = 15;
Run Code Online (Sandbox Code Playgroud)
2)
struct MyStruct
{
int num;
MyStruct *next;
};
MyStruct *ms = new MyStruct;
ms->num = 5;
ms->next = new MyStruct;
ms->next->num = 15;
Run Code Online (Sandbox Code Playgroud)
一般来说,我可能对链表和列表有点困惑,它们对某些特定的东西有用吗?请给我多解释一下。
我正在读一本关于JS数据结构的书,它提到:
javascript中的数组被实现为对象,导致它们比使用其他语言(如C++和Java)构建的数组效率低.
为什么?
我正在为一个用C++编写的学校项目制作一个Monopoly游戏.我正在做的第一件事是实现董事会.对我来说直观的是,每个tile都是一个包含信息和函数以及诸如此类的东西,但我无法确定这些是否应该包含在链表或数组中.
这对链接列表是有意义的,因为我可以简单地将最后一个tile指向第一个,但是使用数组似乎也更有效,因为我可以立即访问Tile [5].
任何人都可以澄清哪个更适合这个目的?
如果我们拥有std::set并且std::vector可以动态增长和缩小,为什么我们需要链表?
NB我真的不明白,为什么会有这么多的选票.唐氏选民,请留下评论.
linked-list ×7
arrays ×6
arraylist ×3
c++ ×3
collections ×3
java ×3
performance ×2
c ×1
c# ×1
dynamic ×1
javascript ×1
matlab ×1
oop ×1
resize ×1