Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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 可修改列表的应用程序中使用了什么数据结构?_Java_Android_List_Arraylist_Time Complexity - Fatal编程技术网

Java 可修改列表的应用程序中使用了什么数据结构?

Java 可修改列表的应用程序中使用了什么数据结构?,java,android,list,arraylist,time-complexity,Java,Android,List,Arraylist,Time Complexity,在某些应用程序中,您可以在项目列表中移动项目、删除项目、添加或插入项目等 通常我会说ArrayList可以工作,但显然很多操作都是线性时间 大多数人使用的数据结构是否更好?如果您的首要任务是从维护任意顺序的集合中插入和/或删除元素,那么与Java捆绑的类就满足了这一需要。您可以非常快速地插入或删除任何特定索引号处的任何元素 双链表链中的每个链接都知道其前一个链接和后一个链接。每个元素都有一个指向前面元素的引用/指针和另一个指向后面元素的引用/指针。因此,插入意味着告诉一个链接对来考虑新的元素作为

在某些应用程序中,您可以在项目列表中移动项目、删除项目、添加或插入项目等

通常我会说ArrayList可以工作,但显然很多操作都是线性时间


大多数人使用的数据结构是否更好?

如果您的首要任务是从维护任意顺序的集合中插入和/或删除元素,那么与Java捆绑的类就满足了这一需要。您可以非常快速地插入或删除任何特定索引号处的任何元素

双链表链中的每个链接都知道其前一个链接和后一个链接。每个元素都有一个指向前面元素的引用/指针和另一个指向后面元素的引用/指针。因此,插入意味着告诉一个链接对来考虑新的元素作为他们的继承者或前任。链条的其余部分保持不变

LinkedList
的缺点是,按索引号进行访问的成本很高,因为查找第n个元素意味着遍历链中从一个元素到下一个元素的n个链接。链表本质上意味着顺序访问。因此,获取一个元素是昂贵的,但是一旦到达了,插入/删除的机制就很便宜了

LinkedList的另一个缺点是出于类似的原因(顺序访问)进行搜索。由于排序是任意的且未排序,因此无法大致预测/预期元素可能在何处找到。因此,搜索意味着将链从一个元素遍历到下一个元素,并对每个元素执行比较

另一方面,如果索引访问是您的优先权,那么
ArrayList
就是您的选择。直接访问第n个元素是
ArrayList
的专长。插入和删除元素是非常昂贵的操作,除非处理最后一个元素,否则需要重建备份阵列。对于大型阵列,这会影响内存管理,因为阵列必须位于连续内存中


LinkedList
ArrayList
都允许重复

LinkedList
ArrayList
都不是线程安全的。因此,如果从多个线程访问其中一个线程,则需要解决整个其他类别的问题


要理解这些细微差别,请进行研究和概括。

如果您的首要任务是从维护任意顺序的集合中插入和/或删除元素,那么与Java捆绑的类就满足了这一需要。您可以非常快速地插入或删除任何特定索引号处的任何元素

双链表链中的每个链接都知道其前一个链接和后一个链接。每个元素都有一个指向前面元素的引用/指针和另一个指向后面元素的引用/指针。因此,插入意味着告诉一个链接对来考虑新的元素作为他们的继承者或前任。链条的其余部分保持不变

LinkedList
的缺点是,按索引号进行访问的成本很高,因为查找第n个元素意味着遍历链中从一个元素到下一个元素的n个链接。链表本质上意味着顺序访问。因此,获取一个元素是昂贵的,但是一旦到达了,插入/删除的机制就很便宜了

LinkedList的另一个缺点是出于类似的原因(顺序访问)进行搜索。由于排序是任意的且未排序,因此无法大致预测/预期元素可能在何处找到。因此,搜索意味着将链从一个元素遍历到下一个元素,并对每个元素执行比较

另一方面,如果索引访问是您的优先权,那么
ArrayList
就是您的选择。直接访问第n个元素是
ArrayList
的专长。插入和删除元素是非常昂贵的操作,除非处理最后一个元素,否则需要重建备份阵列。对于大型阵列,这会影响内存管理,因为阵列必须位于连续内存中


LinkedList
ArrayList
都允许重复

LinkedList
ArrayList
都不是线程安全的。因此,如果从多个线程访问其中一个线程,则需要解决整个其他类别的问题


要了解这些细微差别,请研究和概括。

你可以使用链表,但随后你会失去随机访问。人们在实践中使用什么,因为他们似乎两者都使用?我不确定。但是你的数据集有多大?如果它足够小,可以显示,那么在
ArrayList
中移动对象的速度应该足够快,不会引起注意。所以我想大多数人都会因为小n而受到性能的影响?大n比如一百万怎么样?
LinkedList
ArrayList
各有优缺点,决定您的主要用例是什么,并选择更适合这些用例的实现。您可以使用链接列表,但随后会失去随机访问。人们在实践中使用什么,因为他们似乎两者都做?我不确定。但是你的数据集有多大?如果它足够小,可以显示,那么在
ArrayList
中移动对象的速度应该足够快,不会引起注意。所以我想大多数人都会因为小n而受到性能的影响?大n比如一百万怎么样?
LinkedList
ArrayList
各有优缺点,决定您的主要用例是什么,并选择更适合这些用例的实现。链表听起来很糟糕,如果必须在线性时间内每次从一开始就进行访问,为什么还要费心快速插入和删除呢?什么时候比较合适?当你不经常访问元素时?@SeanHill与其在这里交谈,不如阅读我在最后一句中链接的维基百科页面,了解相关的机制。链表的用途是