这一章内容不多且不难,估计稍有经验的人都可以飞速翻阅。
[quote]数组就是一个简单的线性序列,这使得元素访问非常快速。但是为这种速度所付出的代价是数组对象的大小被固定。[/quote]钢炼的等价交换原则的现实版。。。
速度是数组唯一的优势了,如果性能没有问题,ArrayList完胜,尤其是数组和泛型的关系不太好。
感觉其他真没什么好说的了。。。好吧,列下JAVA中对数组常用操作的方法:
[b]System.arraycopy():[/b]
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
基本类型和对象类型的数组都可,比我们写for循环要快,要注意的是这是浅拷贝,即只是拷贝了对象的引用。
[b]Arrays.equal():[/b]
static boolean equals(Object[] a, Object[] a2)
如果两个指定的 Objects 数组彼此相等,则返回 true。
当然还有各种基本类型参数的版本,如果是多维数组则要用deepEquals()。另外对于对象类型,是通过其equals()方法比较,所以String类型的话只是比较字符串值。
[b]Arrays.fill():[/b]
static void fill(Object[] a, int fromIndex, int toIndex, Object val)
将指定的 Object 引用分配给指定 Object 数组指定范围中的每个元素。
当然有各种基本类型参数的重载版本,fromIndex和toIndex可以没有表示所有都赋值。感觉这方法太单调了,所有值都相同。。。
[b]Arrays.sort():[/b]
static void sort(Object[] a, int fromIndex, int toIndex)
根据元素的自然顺序对指定对象数组的指定范围按升序进行排序。
同样有基本类型参数的重载版本(没有boolean)。对于基本类型,自然顺序比较容易理解,但对于对象类型,让该对象继承接口Comparable<T>,然后在compareTo(T o)方法中按自己的喜好设置比较规则。
如果这个方法已经被别人先手了,但又不是自己想要的排序方式肿么办,用下面的这个方法吧
static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。
写个具体的比较器继承 Comparator<T>接口然后实现compare(T o1, T o2)方法,把这个比较器传入即可。另外在这里看到了泛型中通配符单一边界中super的实际应用。
[b]Arrays.binarySearch():[/b]
static int binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
使用二分搜索法来搜索指定数组的范围,以获得指定对象。
同样有基本类型参数的重载版本(没有boolean),与上面的sort()方法类似,需继承Comparable<T>接口或是使用比较器的重载版本
static <T> int binarySearch(T[] a, int fromIndex, int toIndex, T key, Comparator<? super T> c)
但要注意,二分搜索法是建立在对象数组已排序的基础上,如果没有排序或是数组中有重复元素的话,嘿嘿。。。
[b]Arrays.toString():[/b]
static String toString(Object[] a)
返回指定数组内容的字符串表示形式。
同样有基本类型参数的重载版本,以及多维数组时的deepToString()。
[b]Arrays.asList():[/b]
static <T> List<T> asList(T... a)
返回一个受指定数组支持的固定大小的列表。
即数组转List,List转数组可以用方法Collection.toArray()。
[quote]数组就是一个简单的线性序列,这使得元素访问非常快速。但是为这种速度所付出的代价是数组对象的大小被固定。[/quote]钢炼的等价交换原则的现实版。。。
速度是数组唯一的优势了,如果性能没有问题,ArrayList完胜,尤其是数组和泛型的关系不太好。
感觉其他真没什么好说的了。。。好吧,列下JAVA中对数组常用操作的方法:
[b]System.arraycopy():[/b]
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
基本类型和对象类型的数组都可,比我们写for循环要快,要注意的是这是浅拷贝,即只是拷贝了对象的引用。
[b]Arrays.equal():[/b]
static boolean equals(Object[] a, Object[] a2)
如果两个指定的 Objects 数组彼此相等,则返回 true。
当然还有各种基本类型参数的版本,如果是多维数组则要用deepEquals()。另外对于对象类型,是通过其equals()方法比较,所以String类型的话只是比较字符串值。
[b]Arrays.fill():[/b]
static void fill(Object[] a, int fromIndex, int toIndex, Object val)
将指定的 Object 引用分配给指定 Object 数组指定范围中的每个元素。
当然有各种基本类型参数的重载版本,fromIndex和toIndex可以没有表示所有都赋值。感觉这方法太单调了,所有值都相同。。。
[b]Arrays.sort():[/b]
static void sort(Object[] a, int fromIndex, int toIndex)
根据元素的自然顺序对指定对象数组的指定范围按升序进行排序。
同样有基本类型参数的重载版本(没有boolean)。对于基本类型,自然顺序比较容易理解,但对于对象类型,让该对象继承接口Comparable<T>,然后在compareTo(T o)方法中按自己的喜好设置比较规则。
如果这个方法已经被别人先手了,但又不是自己想要的排序方式肿么办,用下面的这个方法吧
static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。
写个具体的比较器继承 Comparator<T>接口然后实现compare(T o1, T o2)方法,把这个比较器传入即可。另外在这里看到了泛型中通配符单一边界中super的实际应用。
[b]Arrays.binarySearch():[/b]
static int binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
使用二分搜索法来搜索指定数组的范围,以获得指定对象。
同样有基本类型参数的重载版本(没有boolean),与上面的sort()方法类似,需继承Comparable<T>接口或是使用比较器的重载版本
static <T> int binarySearch(T[] a, int fromIndex, int toIndex, T key, Comparator<? super T> c)
但要注意,二分搜索法是建立在对象数组已排序的基础上,如果没有排序或是数组中有重复元素的话,嘿嘿。。。
[b]Arrays.toString():[/b]
static String toString(Object[] a)
返回指定数组内容的字符串表示形式。
同样有基本类型参数的重载版本,以及多维数组时的deepToString()。
[b]Arrays.asList():[/b]
static <T> List<T> asList(T... a)
返回一个受指定数组支持的固定大小的列表。
即数组转List,List转数组可以用方法Collection.toArray()。