没有大小的Java ME String数组

时间:2011-04-27 12:30:10

标签: java arrays java-me size

我有一个简单的问题?

String[] names  = null ;

names[0] = "Hello"

我收到了错误..

我怎么能实例化数组,因为我不知道大小限制......帮帮我

9 个答案:

答案 0 :(得分:4)

如果您事先不知道数组大小,请使用ArrayList<String>。你在这里做的是无效的(试图访问一个空对象)。


编辑:因为你不能使用Vector和ArrayList,所以你必须推出自己的动态数组实现。你会发现一个几乎准备好了algolist.net 的一些解释。只需用String存储替换int存储。

// Warning: not tested!
public class DynamicStringArray {
    private String[] storage;
    private int size;

    public DynamicArray() {
            storage = new String[10];
            size = 0;
    }

    public DynamicArray(int capacity) {
            storage = new String[capacity];
            size = 0;
    }

public void ensureCapacity(int minCapacity) {
    int capacity = storage.length;
    if (minCapacity > capacity) {
        int newCapacity = (capacity * 3) / 2 + 1;
        if (newCapacity < minCapacity)
            newCapacity = minCapacity;
        storage = Arrays.copyOf(storage, newCapacity);
    }
}

private void pack() {
    int capacity = storage.length;
    if (size <= capacity / 2) {
        int newCapacity = (size * 3) / 2 + 1;
        storage = Arrays.copyOf(storage, newCapacity);
    }
}

public void trim() {
    int newCapacity = size;
    storage = Arrays.copyOf(storage, newCapacity);
}

    //...
}

答案 1 :(得分:3)

String[] names = new String[1];
names[0] = "Hello";

如果您事先不知道尺寸,请使用ArrayList<String>

ArrayList<String> names = new ArrayList<String>();
names.add("hello");
names.add("another string");
...

看起来j2me有非通用的ArrayList你可以像这样使用。

ArrayList names = new ArrayList();
names.add("hello");
names.add("another string");
....

String name = (String) names.get(1);

答案 2 :(得分:3)

这个怎么样?

String[] names  = new String[] {  "Hello" };

或者您也可以使用ArrayListStringCollection

修改

对于J2ME:有一个针对动态Int阵列发布here的技巧。我想应该可以将它转换为字符串。我已经转换了这个例子,但是我没有J2ME模拟器来测试它:

public class DynamicStringArray {
    private static final int CAPACITY_INCREMENT = 10;
    private static final int INITIAL_CAPACITY = 10;

    private final int capacityIncrement;

    public int length = 0;
    public String[] array;

    public DynamicStringArray(int initialCapacity, int capacityIncrement) {
        this.capacityIncrement = capacityIncrement;
        this.array = new String[initialCapacity];
    }

    public DynamicStringArray() {
        this(CAPACITY_INCREMENT, INITIAL_CAPACITY);
    }

    public int append(String str) {
        final int offset = length;
        if (offset == array.length) {
            String[] old = array;
            array = new String[offset + capacityIncrement];
            System.arraycopy(old, 0, array, 0, offset);
        }
        array[length++] = str;
        return offset;
    }

    public void removeElementAt(int offset) {
        if (offset >= length) {
            throw new ArrayIndexOutOfBoundsException("offset too big");
        }

        if (offset < length) {
            System.arraycopy(array, offset + 1, array, offset, length - offset
                    - 1);
            length--;
        }
    }
}

答案 3 :(得分:1)

  

我怎么能实例化数组,因为我不知道大小限制

抱歉,这是无法做到的。数组在Java中具有固定大小,您必须在创建数组时给出大小。

如果您需要灵活的缓冲区,请考虑使用ArrayList。这将根据需要增长。

答案 4 :(得分:1)

如果您不知道大小限制(或更一般地说:几乎总是),您将需要使用List而不是数组,因为处理起来会更舒服。

List<String> names = new ArrayList<String>();
names.add("Hello");

您获得异常(NullPointerException)的原因是您只定义了一个变量来引用String - 数组,但没有创建String数组。

你必须像这样初始化它:

String[] names = new String[10];

答案 5 :(得分:1)

当你在使用J2ME并说你不能使用arraylist时,我认为你没有任何选择。

您需要为阵列选择合理的起始大小,观察大小,如果需要添加大于对象的对象,请将其复制到更大的阵列。

由于我们的限制,我想不出另一种方式。

答案 6 :(得分:1)

正如您所解释的那样,您希望在J2ME中使用它,但没有为J2ME提供ArrayList,但是这里有一个实现:

http://kickjava.com/src/j2me/util/ArrayList.java.htm

你可以尝试一下。

你也应该考虑一下:

http://www1.j2mepolish.org/javadoc/j2me/de/enough/polish/util/ArrayList.html

答案 7 :(得分:1)

你可以使用vector

Vector strings=new Vector();
strings.addElement("HELLO");
//then convert it to string array
String str[]=new String[strings.size()];
str[0]=(String)strings.get(0);
像这样...... 希望这有用

答案 8 :(得分:1)

String str[] = { "ABCde","xyZ","sdsdsdf"} ;

String str[][] = { {"ABC","abc"} ,
                {"pqr","qwerTY"}
              } ;