我想创建一个检查对象中项目的java列表?

时间:2011-03-28 19:55:16

标签: java list return

我有一个函数返回一个带有如下参数的对象:

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?

3 个答案:

答案 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)。