如何在java中初始化动态数组?
如果我有一个类需要返回一个可变维度的字符串数组(该维度只能在运行该类的某个方法时确定),那么如何在类的构造函数中声明动态数组 如果问题不够清楚 在php中,我们可以简单地将字符串数组声明为如何在java中初始化动态数组?,java,dynamic-arrays,Java,Dynamic Arrays,如果我有一个类需要返回一个可变维度的字符串数组(该维度只能在运行该类的某个方法时确定),那么如何在类的构造函数中声明动态数组 如果问题不够清楚 在php中,我们可以简单地将字符串数组声明为$my_string_array=array() 并通过$my_string_array[]=“New value”向其添加元素 上述代码在java中的等效代码是什么?请创建一个 List l=newlinkedlist(); l、 添加(“foo”); l、 添加(“酒吧”); 您需要查看java.util包
$my_string_array=array()代码>
并通过$my_string_array[]=“New value”向其添加元素代码>
上述代码在java中的等效代码是什么?请创建一个
List l=newlinkedlist();
l、 添加(“foo”);
l、 添加(“酒吧”);
您需要查看java.util包
,特别是ArrayList
类。它有一些方法,如.add().remove().indexof().contains().toArray()
,等等。java中没有动态数组,数组的长度是固定的。
类似的结构是ArrayList
,在它下面实现了一个真正的数组。
请参阅名称数组列表:)普通java数组(即字符串[]字符串
)无法动态调整大小;当您不在房间但仍要向阵列中添加元素时,需要创建一个更大的阵列,并将现有阵列复制到其第一个n
位置
幸运的是,有java.util.List
实现可以为您完成这项工作。java.util.ArrayList
和java.util.Vector
都是使用数组实现的
但是,您真的关心字符串是否恰好存储在数组内部,还是只需要一个集合就可以让您不断添加项而不用担心空间不足?如果是后者,那么您可以选择几个通用列表中的任意一个实现。大多数情况下,选择是:
ArrayList
-基于阵列的基本实现,未同步
Vector
-基于阵列的同步实现
- 代码> LIKEDLISTAB/COD> >双链接列表实现,更快的插入列表中间的项
您是否希望您的列表中有重复的项目?如果用例中不应该存在重复项,那么您应该选择java.util.Set
。集合保证不包含重复项。一个好的通用集实现是java.util.HashSet
后续问题的回答
要使用类似于$my_string_array[“property”]
的索引访问字符串,您需要将它们放在映射中,也放在java.util
包中。一个好的通用映射实现是HashMap
创建地图后
- 使用
map.put(“键”、“字符串”)
添加字符串
- 使用
map.get(“key”)
通过键访问字符串
请注意,java.util.Map
不能包含重复的键。如果使用相同的键连续调用put
,则只保留最近一次调用中设置的值,先前的值将丢失。但我猜这也是PHP关联数组的行为,所以这不应该令人惊讶。对于大多数用例,数组列表是更好的选择,但这就是为什么使用与类相反的接口声明变量总是好的原因(因此很容易更改基础实现)。确切地说,它位于java.util
(以及所有其他集合类)中java.util.Collections
(大写C)是一个实用程序类,而不是一个包。作为后续问题,是否也可以创建字符串索引[例如:$my_string_array[“property”]]?@lock您应该查看java的Map接口和HashMap类,以创建关联数组(带字符串索引的数组)的等效项。Hashmaps可以使用任何类型的对象作为键(索引)。如果需要保留插入顺序,或者能够使用整数位置索引,请查看LinkedHashMap类。
List<String> l = new LinkedList<String>();
l.add("foo");
l.add("bar");