2015-04-05 25 views
1

我有一些用JavaScript編寫的參考代碼,我試圖將它移植到Java。Java中具有Javascript數組類似性質的數組

我在移植時遇到的問題是,我沒有任何Java可以同時用作堆棧和普通數組的東西。參考代碼使用一個數組對象,它可以像普通數組一樣工作,也可以像堆棧一樣。

有什麼我可以用來解決我的問題?

參考代碼:

var ascii85 = function (input) { 
    // input: Array: an array of numbers (0-255) to encode 
    var result = [], 
     reminder = input.length % 4, 
     length = input.length - reminder; 
    c(input, length, result); 
    if (reminder) { 
     var t = input.slice(length); 
     while (t.length < 4) { 
      t.push(0); 
     } 
     c(t, 4, result); 
     var x = result.pop(); 
     if (x == "z") { 
      x = "!!!!!"; 
     } 
     result.push(x.substr(0, reminder + 1)); 
    } 
    return result.join(""); 
}; 

c函數的代碼如下:

var c = function (input, length, result) { 
    var i, j, n, b = [0, 0, 0, 0, 0]; 
    for (i = 0; i < length; i += 4) { 
     n = ((input[i] * 256 + input[i + 1]) * 256 + input[i + 2]) 
      * 256 + input[i + 3]; 
     if (!n) { 
      result.push("z"); 
     } else { 
      for (j = 0; j < 5; 
       b[j++] = n % 85 + 33, n = Math.floor(n/85) 
      ); 
     } 
     result.push(String.fromCharCode(
      b[4], b[3], b[2], b[1], b[0])); 
    } 
}; 
+1

一位老學校的C程序員是否寫過這樣的代碼?這不是很... JavaScript-y。 – vlaz 2015-04-05 19:35:32

+0

也「同時堆棧和正常數組」 - 我試圖看看這兩者是什麼需要在這裏,但直到那時的預感 - 會列表工作?它實現了Stack接口,你可以做'list.get(n)'。 – vlaz 2015-04-05 19:37:51

+0

讓我試一試使用List。 – Sunny 2015-04-05 19:40:00

回答

1

的Javascript Array.prototype.push對應於List#add

t.add(0); 

List沒有模擬的Array.prototype.pop但你可以remove最後一個元素:

result.remove(t.size() - 1); 

因此,代碼因此可轉換爲使用ArrayList,例如。

LinkedList允許push/pop以及索引訪問,但其索引是O(n)。

還有Stack其中有push/pop和O(1)索引,但它是Vector的子類,其中的新代碼通常不會使用。 (基本上Vector的操作是同步的線程安全,這是一個無意義的開銷如果Stack沒有線程之間共享。VectorCollections.synchronizedList在這方面所取代,所以Stack具有非常小衆的功能集。)

我也看不出有問題,做一些類似如下:

public class MyList<E> extends ArrayList<E> { 
    public E pop() { 
     return this.remove(this.size() - 1); 
    } 
} 

它不會破壞里氏替換原則(仍表現爲ArrayList)。

+0

非常感謝你:) – Sunny 2015-04-05 20:04:06

+0

Sorrry,是的 - 我正在尋找一個不同的'List'實現方式。 – vlaz 2015-04-05 20:07:47

+0

我認爲Vid的解決方案也很有用,但還沒有嘗試過,但我認爲它也應該起作用。感謝您的解決方案。 :) – Sunny 2015-04-05 20:10:57