import java.util.*;
class Animal{
String dog; String cat;
}
public class Arraylist {
public static void main (String[] args) {
Animal var=new Animal();
var.dog="german";
var.cat="persian";
List <Animal> al=new ArrayList<Animal>();
al.add(var);
Iterator itr= al.listIterator();
while(itr.hasNext())
{System.out.print(", "+ itr.next());}
}
}
现在我想迭代这个类的元素。我怎么能这样做? 谢谢!
答案 0 :(得分:1)
您正在迭代您班级的元素。
我看到了一些潜在的问题:
将您的课程从Arraylist
重命名为其他内容,与java.util.ArrayList
不太相似。
将Iterator itr=...
更改为Iterator<Animal> itr=...
如果您的Animal
课程没有覆盖toString
,则应该。否则System.out.print(", "+ itr.next())
不会打印有意义的输出。
关于第3点。添加到您的Animal
类(可能还有这个类的子类,具体取决于您要打印的内容):
@Override
public String toString ()
{
return "someStringThatRepresentsTheStateOfYourAnimalObject";
}
答案 1 :(得分:0)
我知道您的问题已经解决,但我想提出一个解决方案和一些建议,以便您可以编写更好的Java代码。
首先,名称Arraylist
很糟糕。由于内置的Java.Util ArrayList类,它可能会导致误解,最重要的是它没有描述它的作用!您是否打算将其用作Animal
个对象的容器?然后你可以命名这个类AnimalList。您是否尝试提供ArrayList的实现(可能比在java ArrayList中构建的更轻量级)?然后选择一个更通用的名称来描述这个列表并使用泛型!
你最好将Animal类放在另一个源文件中,但我认为你已经这样做了,这样就可以更容易地粘贴到这里了。
关于Iterator部分,你应该实现Iterable接口(就像java util ArrayList那样),然后返回一个Iterator。您声称要迭代该类的元素。但你的班级没有元素!!你只有一个动物容器,其范围只是主要方法。您应该在类中添加一个容器,并在该容器中添加一些动物。
关于toString方法,您看到的Animal @ 2a139a55只是Animal对象的内存地址。当您要打印已创建的类时,这是toString方法的默认操作。如果您尝试从示例的java库中打印一个类,您会发现他们很可能覆盖了toString方法来打印更有用的东西。
总而言之,使用调整大小数组的最小ArrayList实现(我将你的名字保留为Arraylist)可以是:
import java.util.Iterator;
import java.util.NoSuchElementException;
class Animal{
String dog;
String cat;
@Override
public String toString() {
return "Dog: " + dog + "\nCat: " + cat + "\n\n";
}
}
public class Arraylist<Item> {
public Item list[];
private int N = 0;
public Arraylist() {
list = (Item[]) new Object[2];
}
public boolean isEmpty() {
return N == 0;
}
public int size() {
return N;
}
private void resize(int max) {
Item[] temp = (Item[]) new Object[max];
for (int i = 0; i < N; i++) {
temp[i] = list[i];
}
list = temp;
}
public void add(Item item) {
if (N == list.length)
resize(2 * list.length);
list[N++] = item;
}
public Item remove() {
if (isEmpty())
throw new NoSuchElementException();
Item item = list[N-1];
list[N-1] = null;
N--;
if (N > 0 && N == list.length/4)
resize(list.length/2);
return item;
}
public Iterator<Item> iterator() {
return new ArraylistIterator();
}
private class ArraylistIterator implements Iterator<Item> {
private int current = 0;
private ArraylistIterator() {
current = 0;
}
@Override
public boolean hasNext() {
return (current != N);
}
@Override
public Item next() {
if (hasNext())
return list[current++];
throw new NoSuchElementException();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
public static void main (String[] args) {
Animal var=new Animal();
Animal var2=new Animal();
Animal var3=new Animal();
Animal var4=new Animal();
var.dog="german";
var.cat="persian";
var2.dog="german1";
var2.cat="persian1";
var3.dog="german2";
var3.cat="persian2";
var4.dog="german3";
var4.cat="persian3";
Arraylist al = new Arraylist();
al.add(var);
al.add(var2);
al.add(var3);
al.add(var4);
Iterator itr= al.iterator();
while(itr.hasNext())
{
System.out.print(itr.next());
}
}
}
希望它有所帮助!!