您的位置:首页 > 编程语言 > Java开发

关于数组的一些个人理解和源码

2018-03-01 11:02 459 查看
数组的特殊性:

java中有大量其他的方式可以持有对象,为什么数组十分的与众不同呢?

因为数组与其他种类别的容器的区别有三方面:效率、类型和保存基本类型的能力。

Java中数组是一种效率最高的存储和随机访问对象引用序列的方式。

数组就是一个简单的线性序列,所以访问元素会特别快。

但是弊端就是数组对象的大小是被固定的,并且在生命周期中不可改变。

很容易就会想到ArrayList的本质也是数组,并且他的访问速度相对于LinkedList来说还非常快,主要ArrayList的长度在其生命周期中可以随意变化。

ArrayList可以通过创建一个新的实例,然后把旧实例中所有的引用移到新实例中,从而实现更多空间的自动分配。

但是这种弹性需要开销,因此,ArrayList的效率比数组低得多。

无论是哪种数据类型的数组,数组标识符其实只是一个引用,指向堆中创建的一个真实对象。

对象数组和基本类型数组在使用上几乎是一样的,只不过是对象数组保存的是对象的引用,基本类型数组保存的是基本类型的值。

Arrays实用功能:

equals()

用于比较两个数组是否相等(deepEquals()用于比较多维数组)

jdk源码:

public static boolean equals(char[] a, char[] a2) {
if (a==a2)
return true;
if (a==null || a2==null)
return false;

int length = a.length;
if (a2.length != length)
return false;

for (int i=0; i<length; i++)
if (a[i] != a2[i])
return false;

return true;
}


sort()

用于数组排序:http://blog.csdn.net/octopusflying/article/details/52388012

binarySearch()

在已经排序的数组中查找元素

jdk源码:

public static int binarySearch(int[] a, int key) {
return binarySearch0(a, 0, a.length, key);
}

private static int binarySearch0(int[] a, int fromIndex, int toIndex,
int key) {
int low = fromIndex;
int high = toIndex - 1;

while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];

if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1);  // key not found.
}


toString()

产生数组的String表示:

jdk源码:

public static String toString(long[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";

StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}


hashCode()

产生数组散列码:

jdk源码:

public static int hashCode(long a[]) {
if (a == null)
return 0;

int result = 1;
for (long element : a) {
int elementHash = (int)(element ^ (element >>> 32));
result = 31 * result + elementHash;
}

return result;
}


asList()数组转变为List容器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 数组