我有一个函数返回一个带有如下参数的对象:
public static class Classname getClassName(Object o){
......
......
return new Classname(a,b,c,d,e)
}
所以我想创建一个列表,它接受这些对象并检查它们是否已经返回,如果它们是我想要它创建一个新对象,如果不是它可以返回它
我会这样做:final List<Classname> name = new ArrayList<Classname>();
how do i put the object into the list?
答案 0 :(得分:1)
控制缓存以限制对象的实例化并不困难,但最佳实现可能取决于您的类。
这是一个简单的方法:
hashCode()
实施equals()
和Classname
。像这样:
private static final Map<Classname, Classname> cache = new HashMap<Classname, Classname>();
public static Classname getClassName(Object o){
Classname newC = new Classname(a, b, ...);
Classname oldC = cache.get(newC);
if ( oldC == null ) {
cache.put(newC, newC);
return newC;
} else {
return oldC;
}
}
但正如您所看到的,在这种情况下,您必须创建一个Classname才能在缓存中查找它!当您拥有标识缓存中对象的唯一键(例如String“name”)时,此模式可以更好地工作。然后,您可以将其用作地图的键类型。
如果您只想使用列表,则需要实施equals
(以及hashCode
),然后您就可以执行此操作:
Classname newC = new Classname(a, b, ...);
for ( Classname existing : name ) {
if ( newC.equals(existing) ) {
return existing;
}
}
name.add(newC);
return newC;
答案 1 :(得分:0)
添加通常会将对象添加到列表中。在这种情况下...... name.add(o);
for( Object o: name ) { System.out.println(o); }
答案 2 :(得分:0)
请参阅此page:
添加
public boolean add(Object o)
将指定的元素追加到末尾 这个清单。
参数:o - 元素 将附加到此列表中。
返回: 是的(根据总的合同) Collection.add)。