仅收集方法

时间:2017-02-09 22:59:31

标签: java

一个硬件问题

您将获得一个列表L和另一个列表P,其中包含按升序排序的整数。操作printLots(L,P)将打印L中由P指定的位置的元素。例如,如果P = 1,3,4,6,则位于1,3,4和6中的元素在L中印刷。编写程序printLots(L,P)。您提供的代码应该是java方法本身(不是伪代码),包含类不是必需的。 您可以仅使用列表L和P继承的公共集合https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html方法。您可能不使用仅在List中的方法。 Collection方法返回的任何内容都是合理的游戏,因此您可能会考虑如何使用迭代器。

大家好,最重要的是问题的一部分。我对这意味着什么很困惑。我对收集和列表不是很熟悉。那么这个要求是否意味着我不能使用诸如get()之类的方法,而是必须使用Iterator?

这是我的代码:

public static void printLots(List<Integer> L, List<Integer> P){
    int size = L.size;
    for(int i=0; i<P.size; i++){
        int pos = P.get(i);
        if(P.get(i) <= size){
            int val = L.get(pos);
            System.out.println(val);
        }
        else{
            System.out.println("It has exceeded the number of elements in L");
        }
    }



}

2 个答案:

答案 0 :(得分:0)

不,你不能使用List.get(idx)

我认为他们正试图让你想到一个更有趣的&#34;这样做的方式。 Collection在技术上确定了您可以使用的toArray方法,但它可能违背了您设置的问题精神。

Collection也有contains方法,因此您可以迭代第一个列表,递增计数器,并查看第二个列表是否每次包含该索引。如果是这样,请打印出来。这是一种非常低效的方式,但它可以解决问题。

我建议您将参数声明更改为Collection<Integer>,这样编译器就会阻止您意外使用List

中存在的方法

答案 1 :(得分:0)

我怀疑你是对的,.get(int)是不允许的。

由于P中的位置是按升序给出的,因此很容易使用迭代器并保留当前元素的计数器&#34;迭代在&#34;。柜台也严格上升。

A&#34;作弊&#34;将使用.toArray()并在其中使用索引访问:)