如果我有一个类需要返回一个变量维的字符串数组(并且该维度只能在运行该类的某个方法时确定),那么如何在类的构造函数中声明动态数组呢? / p>
如果问题不够明确,
在php中我们可以简单地将一个字符串数组声明为$my_string_array = array();
并按$my_string_array[] = "New value";
添加元素
上面的代码是什么,然后在java?
答案 0 :(得分:13)
您需要查看java.util package
,特别是ArrayList
类。它有.add() .remove() .indexof() .contains() .toArray()
等方法。
答案 1 :(得分:7)
普通的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关联数组的行为,因此它不应该是一个惊喜。
答案 2 :(得分:6)
改为创建List
。
List<String> l = new LinkedList<String>();
l.add("foo");
l.add("bar");
答案 3 :(得分:1)
java中没有动态数组,数组长度是固定的。
类似的结构是ArrayList
,在它下面实现了一个真正的数组。
请参阅名称数组列表:)