[英]How to iterate a class in ArrayList?
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());}
}
}
現在我想迭代這個類的元素。 我怎么能這樣做? 謝謝!
您正在迭代您的類的元素。
我看到一些潛在的問題:
將您的類從Arraylist
重命名為其他類似於java.util.ArrayList
。
將Iterator itr=...
更改為Iterator<Animal> itr=...
如果您的Animal
類沒有覆蓋toString
,它應該。 否則System.out.print(", "+ itr.next())
將不會打印有意義的輸出。
關於第3點。 添加到您的Animal
類(可能還有這個類的子類,具體取決於您要打印的內容):
@Override
public String toString ()
{
return "someStringThatRepresentsTheStateOfYourAnimalObject";
}
我知道你的問題已經解決,但我想提出一個解決方案和一些建議,以便你可以編寫更好的Java代碼。
首先, Arraylist
這個名字很糟糕。 由於內置的Java.Util ArrayList類,它可能會導致誤解,最重要的是它沒有描述它的作用! 您是否打算將其用作Animal
對象的容器? 然后你可以命名這個類AnimalList。 您是否嘗試提供ArrayList的實現(可能比在java ArrayList中構建的更輕量級)? 然后選擇一個更通用的名稱來描述這個列表並使用泛型!
你最好將Animal類放在另一個源文件中,但我認為你已經這樣做了,這樣就可以更容易地粘貼到這里了。
關於Iterator部分,你應該實現Iterable接口(就像java util ArrayList那樣),然后返回一個Iterator。 您聲稱要迭代該類的元素。 但你的班級沒有元素!! 你只有一個動物容器,其范圍只是主要方法。 您應該在類中添加一個容器,並在該Container中添加一些動物。
關於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());
}
}
}
希望能幫助到你!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.