2010-09-07 111 views
9

如果我有需要返回可變尺寸的字符串數組(和尺寸只能在運行一些類的方法來確定),我怎麼聲明動態數組在我的類的構造函數的一類?如何在java中初始化動態數組?

如果問題還不夠清楚,

在PHP中,我們可以簡單地聲明字符串數組作爲$my_string_array = array();$my_string_array[] = "New value";

什麼是上面的代碼等同然後在Java元素添加到它?

回答

13

你會想看看進入java.util package,特別是ArrayList類。它有方法,如.add() .remove() .indexof() .contains() .toArray(),等等。

+1

準確的說,它在'java.util'中(以及所有其他集合類)。 'java.util.Collections'(帶有大寫的C)是一個工具類,而不是一個包。 – 2010-09-07 08:13:29

+0

@Peter好趕上,我固定我的帖子 – 2010-09-07 08:23:49

+0

作爲後續問題,是否也可以創建字符串索引[例如:$ my_string_array [「屬性」]]? – lock 2010-09-08 05:03:36

6

創建List代替。

List<String> l = new LinkedList<String>(); 
l.add("foo"); 
l.add("bar"); 
+3

對於大多數用例來說,數組列表是一個更好的選擇,但這就是爲什麼使用與類相反的接口聲明變量總是好的(因此它很容易更改底層實現)。 – 2010-09-07 08:08:12

1

在Java無動態陣列,陣列的長度是固定的。 類似的結構是ArrayList,一個真正的數組是在它的底層實現的。 看名字陣列列表:)

7

普通Java陣列(即String[] strings)不能被動態地調整大小;當您不在房間中但您仍然想向陣列中添加元素時,您需要創建一個更大的陣列,並將現有陣列複製到其第一個陣列位置n

幸運的是,java.util.List實現,爲你做這項工作。 java.util.ArrayListjava.util.Vector都是使用數組實現的。

不過,你真的關心,如果字符串碰巧在陣列內部存儲,或者你只是需要一個集合,讓你繼續增加項目,而不必擔心運行的空間?如果是後者,那麼你可以選擇幾種通用的List實現。大多數時候的選擇是:

  • ArrayList - 基本基於陣列的實現,而不是同步
  • Vector - 同步,基於陣列的實施
  • LinkedList - 雙鏈表實現,更快的在中間插入項目列表

的你期待你的列表中有重複的項目?如果重複的項目不應該存在您的用例,那麼您應該更喜歡java.util.Set。集合保證不包含重複項目。一個好的通用集合實現是java.util.HashSet

回答後續問題

要使用類似$my_string_array["property"]索引訪問字符串,你需要把它們放在一個Map<String, String>,也在java.util包。一個好的通用地圖實現是HashMap

一旦你創建你的地圖,

  • 使用map.put("key", "string")添加字符串
  • 使用map.get("key")其密鑰來訪問一個字符串。

請注意,java.util.Map不能包含重複鍵。如果您使用相同的密鑰連續呼叫put,則只保留最近一次呼叫中設置的值,而較早的值將丟失。但我猜這也是PHP關聯數組的行爲,所以它不應該是一個驚喜。