【问题标题】:Efficient duplicates checking for multiple types of objects in Java高效的重复检查 Java 中的多种类型的对象
【发布时间】:2014-08-06 03:29:22
【问题描述】:

我正在做一个项目,我有多个类来保存从 xml 文件加载的数据。我想解决的问题是几乎所有的类都有这些方法:

  • addSingle[objectName]
  • addMultiple[objectName]

但是,一个类中可能有更多类型的对象需要以这种方式添加。例如:

类空域{ 私人清单机场; 私有列表航点; ... public void addSingleAirport(Airport a) {...} public void addMultipleAirports(Airport[] a {...} public void addSingleWaypoint(Waypoint w) {...} public void addMultipleWaypoints(Waypoint w) {...} }

我正在考虑将那些addSingleaddMultiple 方法放入一个接口中,然后在实现这些方法时根据对象类型决定应该将其添加到哪个列表中,但这不是很愚蠢吗?

有没有更有效的方法来做到这一点?我想避免将这些方法写入每个需要它们和特定对象的类中,因为它们的作用完全相同。

【问题讨论】:

  • 我忘了说所有这些方法都会检查作为参数提供的对象是否存在。
  • 从 XML 文件加载数据:手动编写这些 JAva 类可能不是最好的方法。例如,有 JAB,而 jc 负责编写添加到列表等所需的任何内容。

标签: java performance list interface


【解决方案1】:

您可以使用带有泛型的抽象类,然后从您的类中扩展它。像这样的:

public abstract class AbstractSomeclass<E>{
    public void addObject(E... obj, List<E>){
        //yourcode here 
    }
}

然后在你的课堂上:

public class MyClass extends AbstractSomeclass<Airport>{
    public List<Airport> list; 
    //.....
    public void someMethod(){
        super.addObject( airportObject, list );
    }
}

也许有一些小错误(在此代码上),但请坚持这个想法。

【讨论】:

    【解决方案2】:

    我认为您的方法并不愚蠢,但这种类型检查确实会影响性能。

    不过,扩展您的方法,我会保留一张由Class 索引的列表地图:

    class Airspace {
        private Map<Class, List<Object>> lists = new HashMap();
    
        public void addSingle(Object o)
        {
            List<Object> list = lists.get(o.getClass());
            if(list == null)
            {
                list = new ArrayList();
                lists.put(o.getClass(), list);
            }
            list.add(o);
        }
    ...
    ...    
    

    【讨论】:

    • 是的,这也是我推荐的方法,尽管首先我会重新审视架构,因为这闻起来有点像没有经过适当考虑的东西。
    【解决方案3】:
    public void addAirports(Airport... a ){...}
    

    应该能够处理所有情况 - 还是我错过了什么?

    很笼统的

    public void addThings( Object... o )
    

    可以写,但是你想失去可读性和类型检查吗?如果对象中没有匹配的 Foo 列表,则运行时错误?不寒而栗。

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 2021-01-04
      • 2014-07-02
      • 2011-05-16
      • 1970-01-01
      相关资源
      最近更新 更多