数组在Java(j2me)中更改向量中的整数的正确方法是什么
作为我关于j2me dynamic arrays的问题的后续行动
我现在想找出一种方法来改变向量中整数的值
假设我有一个向量v,数组arr,整数x,y和I
在C++中我可以做到:v[arr[x][y]] += i;
在j2me中,到目前为止,我发现最好的方法是:
v.setElementAt(new Integer(((Integer)(v.elementAt(arr[x][y]))).intValue()+i), arr[x][y]);
这真的是用j2me实现的最好方法吗
如果是,这里出了什么问题?Java应该让我“少做点工作”和“为我做事”,但我发现自己一次又一次地为它做额外的工作。是我有什么问题,还是Java有什么问题
编辑:我使用的是J2me SDK 3.0,看起来像是Java1.3,所以没有花哨的泛型和自动装箱之类的东西
# 1 楼答案
编辑:在回答这个问题时,我不知道J2ME不支持泛型。感谢苏老师教我:——)
编辑2:我的解决方案是错误的,因为J2ME不支持泛型
如果您使用了泛型(JDK1.5以后的版本),您可以做得更简单
如果我假设声明是这样的
然后
变成
# 2 楼答案
new Object of type Integer
而不是int
原语类型您最初的问题有一个很好的动态int基元类型数组示例作为答案,请再次查看
# 3 楼答案
这里有两件事共同导致代码膨胀:缺少类型安全集合和不可变的int包装器
一种解决方案是使用类型安全集合。GNU Trove为此提供了^{} :
或者,您可以使用像^{} 这样的可变类:
或者,作为一个肮脏的黑客,长度为1的数组:
如果可以将两者结合使用(在没有泛型的情况下,肯定需要编写自定义集合类):
# 4 楼答案
# 5 楼答案
JavaSE对语言(泛型)做了一些更改,这会使代码更简单一些,对我来说,我猜你运气不好
我会选择建议的解决方案,即创建自己的类,该类封装一个普通数组(并在需要时分配一个更大的数组),这是对前面问题的回答
# 6 楼答案
恐怕我就是这么想的,尽管为了避免那种毛茸茸的单句话,我还是把它分开了:
自动装箱和泛型让东西变得更好了,但它们出现在Java5中,J2ME基本上是Java1.3的精简版本,除非我被误导了。以下是它在Java 5+中的外观:
比C++更冗长,但至少没有铸造。我知道人们不愿意在Java中添加泛型之类的东西,因为普通程序员可能“太难”理解[需要引用]。因此,我们最终得到了不可读的代码,直到。Net得到了仿制药,Sun也加入了这股潮流
总之,我同意在泛型/装箱之前使用集合框架是一件痛苦的事情,但我希望至少您不会喜欢调试损坏的指针和损坏的内存