这5个收藏问题你能答对吗?

 2024-02-16 03:02:22  阅读 0

list集合迭代器_迭代list集合的方法_java集合迭代器设计原理

1.什么时候使用?

本质上是一个数组。 可以通过索引直接访问其元素。 但是,如果数组已满,则需要分配一个更大的新数组,并且将所有元素移动到新数组将花费 O(n) 时间。 此外,添加或删除元素需要移动数组中的现有元素。 这可能是使用时最大的缺点。

它是一个双向链表。 因此,要访问中间的元素,必须从列表的开头开始搜索。 另一方面,添加和删除元素速度更快,因为只需要更改节点之间的引用关系。

比较两者在最坏情况下的时间复杂度

方法

获取(索引)

复杂度(1)

在)

添加(E)

在)

复杂度(1)

添加(E,索引)

在)

在)

(指数)

在)

在)

.()

在)

复杂度(1)

.add(E)

在)

复杂度(1)

比较速度是一回事,但对于大型列表,我们还必须考虑内存使用情况。 在 中,每个节点至少需要两个额外的指针来链接前一个和后一个节点。 而在 中,只需要一个元素数组。

总而言之,当选择在项目中使用哪一个时,您心中已经有了答案。

2.集合遍历时如何删除元素

这个就不用我说了。 大家在面试的时候应该都有过这样的经历。 遍历和修改集合的唯一正确方法是使用 .()。 例如:

Iterator itr = list.iterator();
while(itr.hasNext()) {
   // do something
   itr.remove();
}

有时候我们很容易写出如下错误代码

首先:

for(Integer i: list) {
  list.remove(i);
}

如果运行此代码,将抛出 java.util.。 在 Java 中,“通常不允许一个线程修改集合,而另一个线程正在迭代它。”

第二种:

for (int i = 0; i < list.size(); i++) {
    list.remove(list.get(i));
}

如果运行这段代码,不会报错,但永远不会得到你想要的结果。

3.如何将int[]转换为List?

是不是很简单

List<int> list = Arrays.asList(array);

List list = Arrays.asList(array);

你确定你的编译器不会报告错误吗? O(∩_∩)O哈哈~正确的做法有两种。 第一个是介绍Lang包


  org.apache.commons
  commons-lang3
  3.11

List list = Arrays.asList(ArrayUtils.toObject(array));

另一种方法是循环遍历它。

int[] array = {1,2,3,4,5};
List list = new ArrayList();
for(int i: array) {
  list.add(i);
}

4. 如何去除其中的重复元素?

遇到这个问题的时候,有的同学会想到遍历,但是为什么不想想其他的方法呢? 例如,Set 是不重复的。 我们可以直接将元素放入Set中,过滤它们,然后将它们放回去。

ArrayList** list = ... // initial a list with duplicate elements
Set set = new HashSet(list);
list.clear();
list.addAll(set);

5..()你用过吗? 它有什么作用?

首先我们先来说一下(),我们看一下源码

@SuppressWarnings("rawtypes")
public static final List EMPTY_LIST = new EmptyList<>();

@SuppressWarnings("unchecked")
public static final  List emptyList() {
    return (List) EMPTY_LIST;
}

可以看出,它是一个不可变的列表。 此外,每次调用都不会创建空列表的新实例。 如果你熟悉设计模式,你应该明白我的意思。 因此,如果频繁调用,这将为您提供更好的性能。

那么我们需要他做什么呢?

例如,方法返回一个列表。 当没有结果时,返回null。 当有结果时,它返回一个列表。 此时,调用端需要进行空判断。 使用该方法可以方便方法调用者。 你可能会说直接 new()或者new(),但是它们创建的时候会有一个初始大小,并且会占用一些内存。

长按识别

如果您喜欢,请在离开前点击观看。

标签: 数组

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码