重点看了其中几个静态方法…
sort
void sort(parameters)
参数类型可以分为两类:Primitive(基本类型)和Object.
基本类型采用的是优化的快速排序,Object采用的是改进的归并排序。
这位博主总结的很好,学习一下…
http://www.cnblogs.com/gw811/archive/2012/10/04/2711746.html
binarySearch
int binarySearch(parameters)
- 示例: int binarySearch(Type[] a, int fromIndex, int toIndex, Type key)
- 说明:二分查找(logn),fromIndex和toIndex可省,not found则返回负值。(查找范围并不包括toIndex)
- 重载:包括并不仅限于long[], short[], int[], float[], double[], char[], byte[]…
- 特例:
Object[] 比较大小时使用了先将midValue转化为Comparable,然后调用其compareTo()方法。
T[] int binarySearch(T[] a, T key, Comparator
equals
boolean equals(Type[] a, Type[] a2)
判断两个数组中的元素是否相等。
对于普通元素类型,用’==’判断数组对应位置上的元素;
对于特定的Object,用其equals方法判断。
fill
void fill(Type[] a, Type val)
从fromIndex到toIndex(parameter中可省),利用for循环依次赋值。
copyOf
T[] copyOf(T[] original, int newLength)
实际代码如下:
public static <T> T[] copyOf(T[] original, int newLength) {
return (T[]) copyOf(original, newLength, original.getClass());
}
调用了运用反射及泛型的copyOf:
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
内部复制操作利用的是System.arraycopy(Object src, int srcPos, Object dst, int dstPos, int length)
各种重载如:
public static int[] copyOf(int[] original, int newLength) {
int[] copy = new int[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
copyOfRange
T[] copyOfRange(T[] original, int from, int to)
与copyOf类似,只不过限定了copy的范围。
asList
List asList()
返回静态内部类对象ArrayList(a);
此ArrayList继承于AbstractList,使用final数组存储数据(所以不可以进行元素的添加删除操作),它有这样的一些方法:
- int size()
- Object[] toArray()
- E get(int index)
- E set(int index, E element)
- int indexOf(Object o)
- boolean contains(Object o)
如果想将一个数组转化成一个列表并做增加删除操作的话,可以用以下方式:
List<E> list = new ArrayList<E>(Arrays.asList(E[] a))
hashCode
int hashCode(Type a)
hashCode的存在主要是用于查找的快捷性,如HashMap,HashSet等,hashCode是用来在散列存储结构中确定对象的存储地址的。
如果两个对象相同(equals方法判断),那么两个对象的hashCode一定相同。
如果对象的equals方法被重写,那么对象的hashCode也尽量重写。
两个对象的hashCode相同,并不一定表示两个对象就相同(equals方法判断),只能说明这两个对象在散列存储结构中,它们被存放在“同一个篮子里”(同一条链上)。
toString
String toString(Type[] a)
返回诸如null/[]/[1,2,3..];
可以分为三部分:
(1)加括号
(2)对每个元素使用String.valueOf(E element)方法,在String内部调用的是元素自身的toString方法;
(3)连接字符串,使用的是StringBuilder.
其他一些
- int deepHashCode(Object a[]) //当数组中的元素是对象…比如数组的某个元素也是个数组
- boolean deepEquals(Object[] a1, Object[] a2)//同上
- String deepToString(Object[] a) //同上