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

loc*_*ock 9 java dynamic-arrays

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

如果问题不够明确,

在php中,我们可以简单地声明一个字符串数组,$my_string_array = array(); 并通过它添加元素$my_string_array[] = "New value";

上面的代码是什么,然后在java中?

Tom*_*and 13

您将需要查看java.util package,特别是ArrayList课程.它有诸如此类的方法.add() .remove() .indexof() .contains() .toArray().


oks*_*ayt 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关联数组的行为,所以它不应该是一个惊喜.


mik*_*1aj 6

创建一个List代替.

List<String> l = new LinkedList<String>();
l.add("foo");
l.add("bar");
Run Code Online (Sandbox Code Playgroud)

  • 对于大多数用例,数组列表是更好的选择,但这就是为什么使用与类相对的接口声明变量总是好的(因此它很容易改变底层实现). (3认同)