我应该使用哪个类来制作不同类型的集合?我在使用不同类的对象的ArrayList或LinkedList时遇到错误。
import java.util.*;
class A extends Object {
private String name;
A(String n) { name = n;}
public String toString() { return name;}
}
class B extends Object {
private String name;
B(String n) {name = n;}
public String toString() { return name;}
}
class c {
public static void main(String args[]) {
ArrayList ml= new ArrayList();
ml.add(new A("1"));
ml.add(new A("2"));
Iterator itr = ml.iterator();
B b = new B("1001");
ml.add(b);
while(itr.hasNext()) {
Object element = itr.next();
System.out.println(element + "\n");
}
System.out.println();
}
}
答案 0 :(得分:1)
通常你会定义一个Interface
,其中包含这些特定对象共享的所有方法。然后,您将定义一个列表,该列表包含实现该特定接口的成员。
我的建议是假设同一个集合中的项目有一些共同的行为。
List<MyInterface> list = new ArrayList<MyInterface>();
...
另一种方法是根本不定义任何类型:
List list = new ArrayList();
...
这两种方法的区别在于,对于第一种方法,您确切地知道您拥有什么以及可以使用什么。不需要进行转换/检查,并且可以在编译时捕获某些错误。但是,第一种方法需要在设计阶段进行更多思考。
后者更像是一个捕获所有场景,但是它需要您进行检查和其他机制以确定您正在使用的对象类型。
答案 1 :(得分:0)
post trow异常中的代码: java.util.ConcurrentModificationException 。
此异常的原因 - 获取迭代器后更改列表。 你应该在获得迭代器之前更改列表。
请查看文章http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html
答案 2 :(得分:0)
如果你有不同的对象,首先要定义他们共享的任何相似之处。现在创建一个超类或对象类扩展或实现的接口。然后定义高级接口或超类的List。在运行时中,如果您知道的话,使用特定对象将列表中的对象强制转换。否则将对象类型与您正在考虑的所有对象类型匹配。
另一种方法可以是一个List of Object类。在运行时转换为适当的对象,或者就像先前将检索到的对象与不同对象类型的集合匹配一样。
上述程序应易于编码。