Arrays源码学习

重点看了其中几个静态方法…

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) //同上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值