我经常认为允许使用数组作为适当的对象使用自己的方法而不是依赖于Arrays,Arrays和ArrayUtils等辅助类是个好主意.
例如:
ints.sort(); // Arrays.sort(ints); int[] onemore = ints.add(8); // int[] onemore = ArrayUtils.add(ints, 8);
我相信我并不是第一个有这个想法的人,但是我很难找到其他曾经写过这个想法的人.谁能帮我提一些关于这个主题的参考资料?
这被认为是好主意还是坏主意,为什么?
这是多么容易实现?
其他一些例子可能包括(但不要挂断它们,它们与问题本身无关):
int[] ints = {5,4,3,2,1}; // Arrays.sort (ints); ints.sort(); // int pos = Arrays.asList(ints).indexOf (5); // int pos = ArraysUtils.indexOf (ints, 5); int pos = ints.indexOf (5); // Arrays.reverse (ints); ints.reverse(); Arrayarray = ints; // cast to super class. // int length = Array.getLength (array); int length = array.getLength(); // Object n = Array.get (array, 3); Object n = array.get (3); // Array.set (array, 3, 7); array.set (3, 7); Object obj = array; // if (obj instanceof int[]) // System.out.println(Array.toString((int[]) obj)); // else if (....) System.out.println (obj);
James Thomps.. 7
由于一个很好的理由,数组不是Java中的类 - 它们很好地映射了人们对数组如何使用C风格语言的经验的理解.制作数组低级容器而不是对象也有性能原因.因此,有时使用原始数组而不是Collection会有性能优势.
如果要使用对象,则应该只使用Collection(ArrayList是集合的示例).它可能很笨重,但Collections提供了你似乎想要的一种很好的方法访问.
由于一个很好的理由,数组不是Java中的类 - 它们很好地映射了人们对数组如何使用C风格语言的经验的理解.制作数组低级容器而不是对象也有性能原因.因此,有时使用原始数组而不是Collection会有性能优势.
如果要使用对象,则应该只使用Collection(ArrayList是集合的示例).它可能很笨重,但Collections提供了你似乎想要的一种很好的方法访问.
那些方法开始看起来很像ruby或python习语.不幸的是你没有在java中做到这一点(希望你能).
首先,正如其他人所指出的那样,集合类可以为您完成.另一方面,myarray.sort()不太好,因为您可以创建尚未定义排序的对象数组.假设我有
Foo[] foos;
和Foo不可比.foos.sort()会发生什么?我们绝对不希望它只适用于原语
int[] ints; ints.sort(); //legal Object[] objects; objects.sort(); //illegal
并且你当然不能让编译器只允许类似对象的语法.一旦你得到类似的东西
myarray.add(new Foo());
它有点无意义,因为java中的数组不可增长.
如果打印出一个阵列并没有给你那么无用,那就太好了
([I'm an array(*&(*
但是,垃圾.