在Java中将对象添加到通用数组

时间:2015-02-19 05:48:25

标签: java arrays generics iterator

我正在尝试将带有for循环的对象添加到Java中的泛型数组中。我有点想用Iterable接口实现Iterator,但我不知道怎么做。在下面的代码中,每当我将它打印到控制台时,我得到以下输出:" package.ArrayObjects@3343c8b3"

代码:

public class ArrayObjects<E> implements SomeImp<E>{

    private E[] array;

    private int maxCapacity, currentSize;

    public ArrayObjects(){
        currentSize = 0;
        maxCapacity = 100;
        array = (E[]) new Object[maxCapacity];
    }

    public void addAtEnd(E obj){
        //array.add(obj); -> Cannot invoke add(E) on the array tipe E[ ]. Do you know why?
        list[currentSize++] = obj;
    }
}

我的循环:

for(int i=1; i <= 10; i++)
   array.addAtEnd(i); 

System.out.println("Should print 1 .. 10"); 
System.out.println(list);

编辑:我想用它来循环打印,但它只能用于Iterable对象..(我该怎么做?)

for(int x : list)
   System.out.print(x + " ");

我该如何解决这个问题?你知道如何实现迭代器循环遍历数组吗?我必须声明我的类还实现了Iterator吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

我该如何解决这个问题?

阅读Object.toString()方法的javadoc。那是什么习惯了#34;格式&#34;用于输出的数组list

然后查看静态方法Arrays.toString(Object[])的javadoc。这可能是格式化数组以提供您正在寻找的输出类型的最简单方法。


  

你知道如何实现Iterator循环遍历数组吗?

这可以通过以上方式提出......但您可以通过几种简单的方式迭代数组:

    for (int i = 0; i < list.length; i++) {
        // iterates over the array indexes
    }

    for (e E : list) {
        // iterated over the array elements
    }

(这是所有Java 101的东西...... 已被您的老师/教科书/教程所涵盖)


  

我必须声明我的类还实现了Iterator吗?

这是另一种方法......等等。

实际上,您应该使您的类实现Iterable ...这意味着添加Iterator<E> iterator()方法,并实现它以返回具有所需语义的迭代器对象。一种快速而肮脏的方法是使用Arrays.asList将数组包装在List中,然后返回List的迭代器。

如果您的班级直接实施了Iterator,那么您只能迭代元素一次......因为Iterator API无法再次启动。

另一个问题是您的现有代码似乎正在更新不属于list类成员的ArrayObjects对象。这对我来说并没有多大意义。但假设它是有意的,那么你的ArrayObjects是一个漏洞抽象,使用Iterable是非常值得怀疑的。