2010-10-05 49 views
1

我想創建一個充滿我自己的類對象的FIFO隊列。
我發現這個例子,但如果我更換< E>與< PCB>這是行不通的:
爲我自己的類對象創建自己的FIFO隊列類來填充它?

import java.util.LinkedList; 


public class SimpleQueue<E> { 

private LinkedList<E> list = new LinkedList<E>(); 


public void put(E o) { 
    list.addLast(o); 
    } 


    public E get() { 
    if (list.isEmpty()) { 
      return null; 
     } 
    return list.removeFirst(); 
    } 


    public Object[] getAll() { 
    Object[] res = new Object[list.size()]; 
    for (int i = 0; i < res.length; i++) { 
     res[i] = list.get(i); 
     } 
    list.clear(); 
    return res; 
} 



    public E peek() { 
     return list.getFirst(); 
     } 


    public boolean isEmpty() { 
    return list.isEmpty(); 
    } 


    public int size() { 
    return list.size(); 
    } 
    } 
+0

泛型應該是‘一般’。想要將類型變量名稱更改爲「PCB」,看起來好像你有一個特定類型作爲參數。無論如何,當你進行搜索和替換時,你可能只是做了一個類型;使用「PCB」沒有任何語法錯誤,它看起來很醜。 – erickson 2010-10-05 19:18:57

+0

如何用'PCB'替換'E'? – Starkey 2010-10-05 19:18:59

+0

「它不起作用」。什麼不行?不編譯? – 2010-10-06 10:34:01

回答

1

E是一個類型參數。簡而言之,你可以把它看作是一個'模板',它可以用來創建一個可以容納一個特定類的實例的隊列。

如下您可以創建PCB對象的隊列:

SimpleQueue<PCB> queue = new SimpleQueue<PCB>(); 

Java Generics FAQs是一個很好的資源,如果你想了解更多關於Java泛型。

+0

我試過了!我在真正的問題 – Luron 2010-10-05 19:37:20

+0

@Luron中這樣說:你說「...如果我用< PCB >替換< E > ...」,我認爲你在'SimpleQueue的Java源代碼中實際上用''替換了'' '。如果你在我的答案中實例化SimpleQueue,爲什麼它不起作用?我試過了,它似乎工作('put'和'get'似乎工作正常,但我可能會錯過一些東西)。你有編譯錯誤或堆棧跟蹤? – 2010-10-05 19:41:28

+0

沒有。如在 – Luron 2010-10-05 19:47:56

0

太陽的通用教程說以下內容:

我們建議您使用簡練 (單個字符如果可能的話),但正式的類型 參數 令人回味的名字。最好避免在這些名稱中較低的大小寫字符,這使得 很容易區分形式類型 參數與普通類和 接口。對於元素,許多容器類型使用 E,如上面的示例 。

所以,它不能成爲你將它改爲PCB的問題。如果PCB是您想要存儲對象的唯一類,則不必創建泛型類。剛剛從你的類定義行刪除<PCB>PCB替換所有E的:

public class SimpleQueue 
{ 
    LinkedList<PCB> list = new LinkedList<PCB>(); 

    .... 

    public PCB peek() 
    { 
     return list.getFist(); 
    } 
} 
+0

我說過我試過了。並沒有奏效。 – Luron 2010-10-05 19:35:31

1
public class MyQueue{ 

    int arr[]=new int[10]; 
    int i=0; 
    int j=0; 
    public void inn(int a) 
    { 
     System.out.println("You hava entered :"+a); 
     arr[i]=a; 
     i=i+1; 
    } 
    public int out() 
    { 
     return arr[j++]; 

    } 
    public static void main(String args[]) 
    { 
     MyQueue q=new MyQueue(); 
     q.inn(4); 
     q.inn(3); 
     q.inn(46); 
     q.inn(44); 
     q.inn(43); 
     System.out.println(q.out()); 
     System.out.println(q.out()); 
     System.out.println(q.out()); 
     System.out.println(q.out()); 
    } 
}