Java 中的 List —— 有序序列 admin 2023-02-10 15:39:02 篇首语:本文由小编为大家整理,主要介绍了Java 中的 List —— 有序序列相关的知识,希望对你有一定的参考价值。 List 在 java 中是个有序序列:一、容量ArrayList 中有一个容量概念,表示基础数组的大小(无参时默认为 10)。在需要的时候(比如 add操作)会自动增加其容量。LinkedList 没有这个概念。TreeMap 也有容量,默认是 16. 二、改善的 search 方法LinkedList 与 ArrayList 都很低效。比如 Collection 的 contain 和 remove 方法而言。他们均花费线性时间。可以使用相应的算法。 三、改善的 remove 方法(此方法对 ArrayList 无效,ArrayList 由于 remove 会改变数组结构,结构重组将花费大量时间。) foreach 的局限性public static void removeEvensVer2(List lst) { for(Integer x : lst) { if (x % 2 == 0) lst.remove(x); }}抛异常 java.util.ConcurrentModificationException使用 while循环(但是这个方法对于 LinkedList 来说有几个糟糕的操作:1,使用 get方法,去遍历,在遍历的时候 get也花费线性时间。2,remove 同理,remove方法本身也花费线性时间) public static void removeEvensVer1(List lst) { int i = 0; while (i < lst.size()) if (lst.get(i) % 2 == 0) lst.remove(i); else i++; }迭代器自带的 remove 处理 LinkedList:当迭代到其节点时处理 remove 该节点的元素,仅花费常数时间。此外,LinkedList 除了 Collection 借口提供的 iterator方法之外, 还有扩展的 listIterator() 返回一个扩展接口 ListIterator,具有 hasPrevious() pevious() add(Anytype x) set(AnyType newVal) 方法。主要方便从末尾向前迭代,和在迭代时添加和改变值(对于 LinkedList 改变和添加值花费较少。)public static void removeEvensVer3(List lst) { Iterator itr = lst.iterator(); while (itr.hasNext()) if (itr.next() % 2 == 0) itr.remove();} 四、排序对于有序序列,可以使用 Collections.sort(List list, Comparator super T> c) 按照自己的要求进行排序。对于 TreeSet/TreeMap 基于红黑树数据结构,可以按照元素的自然顺序,或者创建 set 时提供的 Comparator 进行排序。 五、 ArrayList 与 LinkedList、Array 的区别Array 固定长度,可以包含 primitives 基础类型与对象了;ArrayList 基于数组结构,是大小可变数组的实现。ArrayList 只能包含 对象,可以使用泛型;LinkedList 基于双向链表结构,List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列 (实现了 Queue 与 Deque 接口)。 以上是关于Java 中的 List —— 有序序列的主要内容,如果未能解决你的问题,请参考以下文章 java基础 LSTM调参经验 您可能还会对下面的文章感兴趣: 相关文章 浏览器打不开网址提示“ERR_CONNECTION_TIMED_OUT”错误代码的解决方法 如何安装ocx控件 VMware的虚拟机为啥ip地址老是自动变化 vbyone和EDP区别 linux/debian到底怎么重启和关机 苹果平板键盘被弄到上方去了,如何调回正常? 机器学习常用距离度量 如何查看kindle型号