【问题标题】:Using Generics with Abstract Data Types in Java在 Java 中使用具有抽象数据类型的泛型
【发布时间】:2010-10-29 09:09:23
【问题描述】:

对于 CS 类,我需要使用三种数据结构解决分配的问题:队列、优先队列和堆栈。我想用一个抽象的数据结构写一个单一的解决方案。我将使用每种所需数据类型的包装类来实现 ADT。这是我目前所拥有的:

一个名为方法的接口:

public interface Method<E> {

    public abstract void add(E data);
    public abstract E remove();
    public abstract E peek();
    public abstract Iterator<E> Iterator();
}

以及实现接口的三个包装类。我称它们为 QueueMethod、StackMethod 和 PriorityQueueMethod。我在实现接口时遇到了一些麻烦。这是实现的开始,它给出了错误“类不是抽象的,并且没有覆盖抽象方法 add(java.lang.Object)”。据我所知,这两个添加方法的签名是相同的。

这里是 QueueMethod 包装类的开头:

public class PriorityQueueMethod<T> implements Method {

    PriorityQueue<T> queue;

    public PriorityQueueMethod() {
        queue = new PriorityQueue<T>();
    }

    public void add(T data) {
        queue.offer(data);
    }
}

【问题讨论】:

  • 尝试 add(Object data) 作为实现方法。
  • @AntonioP 不,那将是一个非通用解决方案。你解决了错误的问题。

标签: java generics abstract-data-type


【解决方案1】:

将泛型添加到您正在实现的 Method 类中,如下所示:

public class PriorityQueueMethod<T> implements Method<T> 

【讨论】:

    【解决方案2】:

    在您的 implements 声明中使用通用签名:

    public class PriorityQueueMethod<T> implements Method<T>
    

    以下是基于 ArrayList 的解决方案的示例实现:

    public class ArrayListMethod<T> implements Method<T>{
    
        private final List<T> inner;
    
        public ArrayListMethod(){
            inner = new ArrayList<T>();
        }
    
        public ArrayListMethod(final Collection<T> data){
            inner = new ArrayList<T>(data);
        }
    
        @Override
        public void add(final T data){
            inner.add(data);
        }
    
        @Override
        public T remove(){
            return inner.remove(0);
        }
    
        @Override
        public T peek(){
            return inner.get(0);
        }
    
        @Override
        public Iterator<T> Iterator(){
            return inner.iterator();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多