java - 使用ArrayList(或更好的链接列表)编写自己的队列在技术上是否正确?[下面的java代码]

标签 java data-structures arraylist stack queue

package data_structures_java ;

import java.util.LinkedList;

class Queue_implementation {
   private LinkedList<Float> list = new LinkedList<Float>();

   public void enqueue(Float item) {
      list.addLast(item);
   }   
   public Float dequeue() {    
      return list.poll();
   }
   public boolean hasItems() {
      return !list.isEmpty();
   }
   public int size() {
      return list.size();
   }
   public void addItems(Queue_implementation q) {
      while (q.hasItems())
         list.addLast(q.dequeue());
   }

}

我想使用 arraylist 来创建自己的队列。但随后我就必须编写像 add_only_to_front() 这样的函数。

问题: 您可以使用哪些基本数据结构来制作自己的链表、堆栈……有什么关键区别吗? 因为我使用数组列表来编写自己的堆栈实现,并且我想将数组列表用于队列、双端队列、链表、映射(可能?)、堆(?)。

这是我使用 arraylist 的堆栈实现:

package data_structures_java;
import java.util.ArrayList ;
public class Stack_implementation {

    ArrayList<Integer> actual_stack ;
    int index_top ;

    public Stack_implementation( int size ){
          actual_stack = new ArrayList<Integer>(size) ;
          index_top = 0 ;

    }

    public int pop(){       
        System.out.println("popped 1 element!") ;
        int result = actual_stack.get(index_top) ;
        actual_stack.remove(index_top) ;
        --index_top ;

        return result ;
    }

    public void push(int element){
        if( index_top > actual_stack.size()){ 
            System.out.println("can't push on stack!");
            return ;
        }

    actual_stack.add(element) ;
    index_top++ ;

    }
    public void print_stack(){

        if(actual_stack.isEmpty() )System.out.println("stack is empty") ;


        for(int i = index_top-1 ; i >= 0 ; i--){
            System.out.println( "|\t" +  actual_stack.get(i)  + "\t|" ) ;
        }

    }


}

最佳答案

差异在于运行时间,因此没有“正确”的方法。尽管某些方法比其他方法好得多。某些数据结构比其他方法更好地实现抽象数据类型(ADT)。例如,数组非常适合堆栈,因为您可以轻松插入和弹出元素;另一方面,数组不太适合实现优先级队列(取决于有序/无序,您可以获得线性运行时间)。对于您列出的大多数示例,数组(数组列表)效果很好。

在我看来,编写自己的 ADT 非常棒。它可以帮助您更好地了解包的工作原理并更好地实现它们的用途。

关于java - 使用ArrayList(或更好的链接列表)编写自己的队列在技术上是否正确?[下面的java代码],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977276/

相关文章:

java - 带有自定义 HandlerMethodArgumentResolver 的 Spring MVC @Valid 验证

java - 什么时候使用 TreeSet 比 HashSet 更快?

string - 用于索引整个文档的数据结构和用于快速搜索任何大小子字符串的算法

java - 在数组列表中存储值并打印它

java - SelectionSort 方法将按类型对 ArrayList 进行排序

java - Android- ActionBar AutoCompleteTextview

java - 如何使用 Camel 在运行时更改处理器属性?

java - 不同技术之间的两阶段提交(COM+、Java)

c++ - C++ 中指针指向指针(AnyType **var)的问题

java - 当使用 ArrayList(Collection<? extends E> c) 作为复制构造函数时,我收到两个错误