如果我有需要返回可變尺寸的字符串數組(和尺寸只能在運行一些類的方法來確定),我怎麼聲明動態數組在我的類的構造函數的一類?如何在java中初始化動態數組?
如果問題還不夠清楚,
在PHP中,我們可以簡單地聲明字符串數組作爲$my_string_array = array();
和$my_string_array[] = "New value";
什麼是上面的代碼等同然後在Java元素添加到它?
如果我有需要返回可變尺寸的字符串數組(和尺寸只能在運行一些類的方法來確定),我怎麼聲明動態數組在我的類的構造函數的一類?如何在java中初始化動態數組?
如果問題還不夠清楚,
在PHP中,我們可以簡單地聲明字符串數組作爲$my_string_array = array();
和$my_string_array[] = "New value";
什麼是上面的代碼等同然後在Java元素添加到它?
你會想看看進入java.util package
,特別是ArrayList
類。它有方法,如.add() .remove() .indexof() .contains() .toArray()
,等等。
創建List
代替。
List<String> l = new LinkedList<String>();
l.add("foo");
l.add("bar");
對於大多數用例來說,數組列表是一個更好的選擇,但這就是爲什麼使用與類相反的接口聲明變量總是好的(因此它很容易更改底層實現)。 – 2010-09-07 08:08:12
在Java無動態陣列,陣列的長度是固定的。 類似的結構是ArrayList
,一個真正的數組是在它的底層實現的。 看名字陣列列表:)
普通Java陣列(即String[] strings
)不能被動態地調整大小;當您不在房間中但您仍然想向陣列中添加元素時,您需要創建一個更大的陣列,並將現有陣列複製到其第一個陣列位置n
。
幸運的是,java.util.List
實現,爲你做這項工作。 java.util.ArrayList
和java.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關聯數組的行爲,所以它不應該是一個驚喜。
準確的說,它在'java.util'中(以及所有其他集合類)。 'java.util.Collections'(帶有大寫的C)是一個工具類,而不是一個包。 – 2010-09-07 08:13:29
@Peter好趕上,我固定我的帖子 – 2010-09-07 08:23:49
作爲後續問題,是否也可以創建字符串索引[例如:$ my_string_array [「屬性」]]? – lock 2010-09-08 05:03:36