相关疑难解决方法(0)

在Java中迭代列表的方法

对于Java语言有些新意,我试图让自己熟悉一个可能遍历列表(或者可能是其他集合)以及每个集合的优点或缺点的所有方法(或者至少是非病态方法).

给定一个List<E> list对象,我知道以下循环所有元素的方法:

基本 循环(当然,还有就是相当于while/ do while循环以及)

// Not recommended (see below)!
for (int i = 0; i < list.size(); i++) {
    E element = list.get(i);
    // 1 - can call methods of element
    // 2 - can use 'i' to make index-based calls to methods of list

    // ...
}
Run Code Online (Sandbox Code Playgroud)

注意:正如@a​​marseillan指出的那样,这种形式对于迭代Lists来说是一个糟糕的选择,因为该get方法的实际实现可能不如使用时那样有效Iterator.例如,LinkedList实现必须遍历i之前的所有元素以获得第i个元素.

在上面的例子中,List实现没有办法"保存它的位置"以使未来的迭代更有效.因为ArrayList它并不重要,因为复杂性/成本get是恒定时间(O(1)),而a LinkedList是它与列表的大小(O(n))成比例.

有关内置Collections实现的计算复杂性的更多信息,请查看此问题 …

java iteration collections loops

543
推荐指数
6
解决办法
87万
查看次数

在java中以相反的顺序遍历列表

我正在迁移一段代码以利用泛型.这样做的一个论点是for循环比跟踪索引或使用显式迭代器更清晰.

在大约一半的情况下,列表(ArrayList)通过今天使用索引以相反的顺序迭代.

有人可以建议一种更清洁的方式(因为我不喜欢indexed for loop使用集合时),虽然它确实有用吗?

 for (int i = nodes.size() - 1; i >= 0; i--) {
    final Node each = (Node) nodes.get(i);
    ...
 }
Run Code Online (Sandbox Code Playgroud)

注意:我无法在JDK之外添加任何新的依赖项.

java collections

241
推荐指数
10
解决办法
22万
查看次数

Java LinkedHashMap获取第一个或最后一个条目

我使用过,LinkedHashMap因为重要的是键在地图中输入的顺序.

但现在我想首先获得key的值(第一个输入的条目)或最后一个.

如果有喜欢的方法first()last()或类似的东西?

我是否需要一个迭代器才能获得第一个键入口?这就是我使用的原因LinkedHashMap!

谢谢!

java dictionary linkedhashmap

123
推荐指数
6
解决办法
11万
查看次数

Java反向foreach

可能重复:
可以以相反的顺序为java中的每个循环执行一次吗?

对于前向迭代:

for (int i=0; i<pathElements.length; i++){
    T pathElem = pathElements[i];
    .......
}
Run Code Online (Sandbox Code Playgroud)

我可以将它编码为foreach:

for(T pathElem : pathElements){
    .......
}
Run Code Online (Sandbox Code Playgroud)

是否有一个开关,以便foreach可以反向迭代?

for (int i=pathElements.length-1; i>=0; i--){
    T pathElem = pathElements[i];
    .......
}
Run Code Online (Sandbox Code Playgroud)

foreach中是否存在反向迭代开关?

(如果没有,你不认为JDK 8,9等包含这个功能会是一个令人兴奋的想法吗?)

java

6
推荐指数
3
解决办法
2万
查看次数

java.util.List的descendingIterator

LinkedList可以使用升序或降序迭代器迭代,如下所示:

       LinkedList<Object> list = new LinkedList<Object>();
       ...
   StringJoiner sJ1 = new StringJoiner(" ");
   list.iterator().forEachRemaining(a -> sJ1.add(a.toString()));
   System.out.println("averse: \n" + sJ1.toString());

   StringJoiner sJ2 = new StringJoiner(" ");
   list.descendingIterator().forEachRemaining(a -> sJ2.add(a.toString()));
   System.out.println("reverse: \n" + sJ2.toString());
Run Code Online (Sandbox Code Playgroud)
averse: 
Hello 2 Chocolate 10
reverse: 
10 Chocolate 2 Hello
Run Code Online (Sandbox Code Playgroud)

但是descendingIterator不适用于ListArrayList.有没有在列表说明任何解决办法,或者为什么的descendingIterator缺席的名单

问题类似于可以为java中的每个循环以相反的顺序执行吗?.但所有答案都建议使用临时解决方案或第三方库.

可能有使用溪流可能吗?(不幸的是,我的谷歌搜索只给出了流Java 8流逆序的缺失标准反转)

正如我所提到的,我的问题与关于流的问题有关,但是:

  • 使用stream只是一个选项,问题是关于java.util.Iteratorjava.util.List
  • 该问题的答案仅解决了部分案例,但表明缺乏方便的一般反向.如果我没有错过术语List是有序集合,对可比项目进行排序,实现顺序会缩小范围.

java linked-list arraylist java-8

4
推荐指数
2
解决办法
1753
查看次数

有没有办法从java的结尾开始增强的for循环

我有两个Java列表.首先,我想从头开始迭代,而另一个我想从头开始.我想为此使用增强型for循环,但我不确定如何做到这一点.有什么建议?

java for-loop

3
推荐指数
2
解决办法
4801
查看次数

反向遍历数组,没有减号

在今天的面试中被问到这个问题.我确定这是一个非常简单的技巧,但我想不出来.如何从一端到另一端遍历一个简单的Java数组(例如,为了从右到左聚合所有值的总和),而不使用"减"(-)符号(所以i--在循环中没有,或类似的东西) )?

编辑:我很确定它应该是一个不涉及Java特定结构的技巧(如Collections).不幸的是我以为我以后会自己想到它,所以我没有问到答案是什么:/

java

3
推荐指数
1
解决办法
168
查看次数

在java中以相反的顺序添加了ArrayList中的元素

我得到ArrayList:

ArrayList logs;
for(Logs log : getLogs()){           
    logs.add(log.getName();        
}
Run Code Online (Sandbox Code Playgroud)

我怎么能以相反的顺序得到这个列表?

java arraylist

1
推荐指数
3
解决办法
6956
查看次数