当前位置: 首页 > 知识库问答 >
问题:

在不使用任何循环的情况下对ArrayList元素执行操作

龙嘉誉
2023-03-14

我正在编写一个java程序,其中我不想对数组列表元素使用任何循环。下面的Sure程序将在不使用任何循环的情况下将输出从0打印到n,因为ArrayList从AbstractCollection继承了一个带有循环的toString()方法。

import java.util.*;
class withoutloop{
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    ArrayList<Integer> arr = new ArrayList<>();
    int n = scan.nextInt();
    for(int i=0;i<=n;i++)
    arr.add(i);
    System.out.println(arr);
}
}
import java.util.*;
class withoutloop{
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    ArrayList<Integer> arr = new ArrayList<>();
    int n = scan.nextInt();
    int m = scan.nextInt();
    int count = 0;
    for(int i=0;i<=n;i++)
    arr.add(i);
    for(int i=2;i<=m;i++){
    Iterator it = arr.iterator();
        while(it.hasNext()){
            Integer element = it.next();
            if(element%i==0)
            count++;
        }
    }
    System.out.println(count);
}
}

现在,如果我使用这个程序,这将给我大约O(n*m)解,这是我不想要的。是否有任何方法可以访问数组列表中的所有元素而不使用任何循环?

共有1个答案

谷涵容
2023-03-14

使用IntStream.rangeClosed,Java 8可以使您的代码更简单,但是如果不设计更智能的算法,您几乎无法避免使用O(n*m)解决方案。

long count = IntStream.rangeClosed(0, n)
                      .mapToLong(element -> IntStream.rangeClosed(2, m)
                          .filter(i -> element % i == 0)
                          .count())
                      .sum();
System.out.println(count);

在Java 8之前,等效代码类似于:

long count = 0;
for (int element = 0; element <= n; element++) {
    for (int i = 2; i <= m; i++) {
        if (element % i == 0) {
            count++;
        }
    }
}
System.out.println(count);
 类似资料:
  • 我有一个返回字符串的函数。 返回的结果可以是回答,也可以是回答

  • 问题内容: 我一直在寻找一种不用使用collections.sort就可以对数组列表进行排序的方法,因为我自己的逻辑有缺陷,而且我遇到了很多麻烦。 我需要对它进行排序,以便可以使用我创建的一种方法,该方法基本上可以执行collections.swap的工作,以便对数组列表进行完全排序。 这是我的代码: 我对此一直很烦恼。抱歉,这是在伤害社区。 问题答案: 我想,你希望下面的算法:在阵列的其余部分发

  • 我想为android构建一个计算器应用程序,为此我需要一个解析器来转换要求解的字符串表达式。现在Java和Kotlin不支持eval函数,仅仅为了一个操作而导入javascript引擎可能会让我面临各种漏洞。所以我做了自己的计算器解析器。现在它工作得很好,除了crash中的负数外,所有算术运算都工作得很好。我确实知道问题是什么,因为我使用数学符号分隔字符串,但我不能在负值中执行任何操作。 输入:-

  • 我有一个动作执行,其中一个if/fe是如果用户按“A”键,它会将文本设置为不同的内容。程序不是在按“A”后设置文本,而是跳过设置文本并向下移动到下面的if语句。我的问题是,如何让我的程序在我的if语句之前设置文本?我的代码在下面,谢谢!

  • 问题内容: 如何在不使用borders-width的情况下使用CSS给任何元素添加边框? 像在Photoshop中一样,我们可以给笔画-内部,中心和外部 我认为默认的CSS边框属性是中心,如photoshop中的中心,对吗? 我想在框内而不是外面给边框。并且不想在框宽中包含边框宽度。 问题答案: 这不会增加额外的宽度和高度。

  • 假设我有两个数据帧,df1和df2。df1和df2都包含“id”列。我想过滤df1,这样得到的df,df1prime,有 只有在df1中找到的ID 在df2中没有找到所有ID 而不使用任何连接。我该怎么做?返回RDDs而不是DFs会有帮助吗?pyspark和scala响应都受到欢迎。 谢谢! 编辑:我想保留df1中的所有行