2013-04-07 54 views
0

我想製作一些字符串將有序地向上移動的東西。例如:移動數組中的元素?

迭代1:

Hello There 
I am 
Asking a question 
To you 

迭代2:

I am 
Asking a question 
To you 
Next String 

我究竟是如何去了解這一點,在最少的內存密集型的方式?謝謝。

+3

到目前爲止你寫了哪些代碼? – nommyravian 2013-04-07 22:23:03

+0

我還沒有,但是我會在每次收到消息時(這是一個Minecraft插件)從另一個陣列中輸入新字符串(例如'Next String') – user2255617 2013-04-07 22:25:19

+0

在陣列中移動元素需要移動所有元素。你堅持使用數組嗎?因爲其他一些數據結構可能更適合這項任務。 – Dukeling 2013-04-07 22:28:00

回答

1

一個簡單的方法是circular queue

循環隊列可以實現爲一個數組和一個指向第一個索引的指針。當你想改變第一個元素時,你只需要提前索引。當索引傳遞數組的末尾,它回滾到索引0

隨着循環隊列:

  • 向上移動的琴絃不需要移動所述陣列中的任何東西。
  • 隊列中的所有條目都可以存儲在一個數組中,與鏈接的實現相比,這需要更少的內存。
+0

謝謝,但我究竟會如何去做呢?對於簡單的問題抱歉,我對Java的使用不太好 – user2255617 2013-04-07 22:31:23

+0

您可以實現一個循環隊列,其中包含一個數組和一個指向隊列開始位置的索引,另一個索引指向新項目的放置位置。 Java提供了這個基於數組的隊列:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ArrayBlockingQueue.html。下面是一個帶有Apache許可證的Java實現:http://www.java2s.com/Code/Java/Collections-Data-Structure/CircularQueue.htm – 2013-04-07 22:36:47

0

如果你沒有義務使用數組,我會建議一個隊列,用它來實現你想要做的事情很簡單。

Queue<String> foo = new Queue<String>(); 
foo.offer("Hello"); //first element is hello 
foo.offer("world"); //second element is world 
String s = foo.poll(); //s = hello and now the first element of the queue is world 
+0

我會試試這個,謝謝:) – user2255617 2013-04-07 22:36:41

+0

注意:java.util。隊列是一個接口。 – 2013-04-07 22:41:20

+0

哦,我正想問爲什麼日食會返回錯誤,謝謝! – user2255617 2013-04-07 22:43:14