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().
普通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关联数组的行为,所以它不应该是一个惊喜.
创建一个List代替.
List<String> l = new LinkedList<String>();
l.add("foo");
l.add("bar");
Run Code Online (Sandbox Code Playgroud)