如何在java中初始化动态数组?

如何在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包

如果我有一个类需要返回一个可变维度的字符串数组(该维度只能在运行该类的某个方法时确定),那么如何在类的构造函数中声明动态数组

如果问题不够清楚

在php中,我们可以简单地将字符串数组声明为
$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");