繁体   English   中英

在 Java 中迭代通用 Collections

[英]Iterating of Generic Collections in Java

我对 Java 非常陌生,并且很难理解 generics、它们的使用方式以及这样做的语法。

我有以下 class

class MyCustomArray<T>{

    private T[] myArray;

    // Default Constructor
    public ArraySet(){
        this.myArray= (T[]) new Object[10];
    }

    // Method to get array length
    public int getSize(){
        return this.myArray.length;
    }

    ... some random code

    // Method to iterate
    public void iterateSomehow(MyCustomArray<? extends T> collection){

        // doesn't work
        for(T obj: collection){...}

        // doesn't work
        for(int i=0; i< collection.size(); i++){
            T nextObj= collection[i];
        }

    }
}

这是针对 class 分配的,它不允许使用像ArrayList这样的标准类。 我觉得我在这里缺少一些基本的东西,但不知道是什么。

我的方法错了吗? 它只是语法吗?

更多上下文:

我的直接目标是检查给定collection object 中的每个值(显然是伪代码):

for( int i=0; i < collection.length; i++ ):
    value = collection[i];
    if (value == badValue):
       // whatever

只有 arrays 可以使用[]语法进行索引,并且只有 arrays 或实现Iterable的类可以用于增强型 for 循环的右侧( for (T xxx: yyy) )。 您的 class 不是数组,也没有实现Iterable ,因此您的尝试都没有奏效。

您的 class 包含一个数组 - myArray 你可以遍历它。 这两个都很好:

for(T obj: collection.myArray){...}
// or
for(int i=0; i< collection.getSize(); i++){
    T nextObj= collection.myArray[i];
}

我也觉得你的方法不应该有参数,而是应该迭代this (如果这实际上是家庭作业的要求,那就无济于事了):

for(T obj: myArray){...}

for(int i=0; i< getSize(); i++){
    T nextObj= myArray[i];
}

您不能直接迭代集合(因为它只是对象),您应该访问 myArray。 你也可以实现 Iterable 接口,它允许你像这样

  for(T obj: collection){...}

https://www.geeksforgeeks.org/java-implementing-iterator-and-iterable-interface/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM