如何使Java数组表现得像JavaScript数组?

时间:2014-07-16 07:28:00

标签: java

在JavaScript中,我可以编写如下代码:

var a = new Array();
a[2] = 'a';
a[20] = 'b';

这对Java不起作用,重点是我不想具体确定它的长度。

在编写java时我怎么能保持这种快乐的风格?

8 个答案:

答案 0 :(得分:1)

如果您不想要特定长度,可以像这样使用List:

List<Character> list = new ArrayList<>();
list.add('a');
list.add('b');

答案 1 :(得分:1)

你做不到。 Java是Javascript,因为火腿是仓鼠。没有理由相信它们具有相同的语法。

如果您想要稀疏数组,请使用Map

final Map<Integer, Character> a = new LinkedHashMap<>();
a.put(2, 'a');
a.put(20, 'b');

答案 2 :(得分:0)

JavaJavaScript是两种不同的语言。你不能在两个方面做同样的事情

Java中你可以写

char[] arr=new char[2];
arr[0]='a';
arr[1]='b';

如果您不想具体说明长度,可以在List

中使用Java
List<Character> list=new ArrayList<>();
list.add('a');
list.add('b');

答案 3 :(得分:0)

如果你想要一个字符数组,你可以这样做:

char[] array = new char[30];
array[2] = 'a';
array[20] = 'b';

答案 4 :(得分:0)

这取决于,如果您要使用固定大小的数组,您可以使用:

char myarray[]=new char[50];
myarray[2]='a';
myarray[20]='b';

如果要动态更改数组的大小,可以使用类似ArrayList的集合(查看文档)并在所需位置插入字符

答案 5 :(得分:0)

正如其他人已经指出的那样:Java和JavaScript是两回事。对于可变大小的容器,有Java collections framework

但是要选择哪个?这取决于你需要什么。从你的问题我可以想象两个案例:

一个可变大小的索引容器:

基本上是一个类似数组的列表。在Java中,除了其他列表实现之外,ArrayList使用如下:

List<Character> myList = new ArrayList<Character>(); 

// insert element at the end of the list
myList.add('a');

// insert element at specific position in list
myList.add(1, 'b');

// this will fail, because there's no element at position 2!!!
myList.add(3, 'c')

用于从整数到字符的映射的容器:

在java中有很多地图实现,我建议使用HashMap,如下所示:

Map<Integer,Character> myMap = new HashMap<Integer,Character>(); 

// insert mappings int -> char
myMap.put(0, 'a');
myMap.put(1, 'b');
myMap.put(20, 'c');

每个容器都有不同的用途。我建议阅读Java collections tutorial以便能够选择最合适的一个。还要看看tucuxi的答案,因为他提出了一个模拟所需行为的解决方案,但考虑到(正如他自己所说)这不是java的做事方式!

答案 6 :(得分:0)

你总是可以自己写。你不会得到语法,但大部分的味道仍然存在。

请注意,效率方面,这是一个糟糕的想法。您可以通过学习&#34; Java方式&#34;来编写更多更好的代码。做事。所有语言都是如此:针对语言的编程肯定会让你感到痛苦。

但这是代码:

class MyArray<T> extends ArrayList<T> {
    public MyArray<T>() { super(); }
    public void add(int i, T value) { 
        if (size() < i) { 
            ensureCapacity(i+1); // grow at most once instead of multiple times 
            while (size() < i)) { 
                add(null); // extend with a null object
            }
            add(value);
        } else {
            add(i, value);
        }
    }            
}

现在,您可以将花园种类ArrayListMyArray的实例进行比较:

ArrayList<Character> a = new ArrayList<>();
MyArray<Character> b = new MyArray<>()
a.add(10, 'X'); // IndexOutOfBoundsException, size is 0
b.add(10, 'X'); // no exception - you get [10 x null, 'X']
b.get(10);      // returns 'X'

请记住,JavaScript数组可以被任意对象索引,而不仅仅是整数 - 但是如果可能的话,JavaScript VM会尝试使用数字索引的数组。对于任意索引,您需要使用Java HashMap

class MyArray2<T> extends HashMap<Object, T> {
    public MyArray2<T>() { super(); }
    public void add(Object o, T value) { set(o, value); }
}

然后您将使用as:

MyArray2<Character> c = new MyArray2<>()
c.add("anything", '?');
c.get("anything"); // returns '?'

答案 7 :(得分:-1)

像这样

char arr[]=new char[30]; //declares an array which can hold 30 characters
    arr[2]='a';
    arr[20]='b';

但是如果你不想指定长度,那么arraylist会帮助你完成你的任务,因为数组的大小总是在Java中固定