首页 > 编程语言 > 详细

java数据结构-数组

时间:2019-04-09 15:21:07      阅读:130      评论:0      收藏:0      [点我收藏+]

1 数组的使用 

声明数组:就是告诉计算机数组的类型是什么。有两种形式:int[] array、int array[]。

分配空间:告诉计算机需要给该数组分配多少连续的空间,记住是连续的。array = new int[10];

赋值:赋值就是在已经分配的空间里面放入数据。array[0] = 1 、array[1] = 2……其实分配空间和赋值是一起进行的,也就是完成数组的初始化。有如下三种形式:

int a[] = new int[2]; //默认为0,如果是引用数据类型就为null
int b[] = new int[] {1,2,3,4,5};
int c[] = {1,2,3,4,5};

操作:就是对数组元素进行操作。通过数组名+有效的下标来确认数据。

2 数组底层

数组底层:普通的java类是以全限定路径名+类名来作为自己的唯一标示的,而数组则是以若干个[+L+数组元素类全限定路径+类来最为唯一标示的。
这个不同也许在某种程度上说明了数组也普通java类在实现上存在很大的区别,也许可以利用这个区别来使得JVM在处理数组和普通java类时作出区分。

Object[]: class [Ljava.lang.Object; (一维数组)
Object: class java.lang.Object; (普通类)

3 数组性能

 一组数据进行求和运算,可将这些数据放到一个数组中,遍历加和,也可将这些数据放到一个list中,遍历求和,数组的性能显而易见。

4 数组长度问题

数组是定长的,一旦初始化声明后是不可改变长度的。那么如何来实现变长数组呢?我们可以利用List集合add方法里面的扩容思路来模拟实现。下面是ArrayList的扩容方法:

 1  public void ensureCapacity(int minCapacity) {
 2         modCount++;  
 3         int oldCapacity = elementData.length;
 4         /**
 5          * 若当前需要的长度超过数组长度时进行扩容处理
 6          */
 7         if (minCapacity > oldCapacity) {
 8             Object oldData[] = elementData;    
 9             int newCapacity = (oldCapacity * 3) / 2 + 1;    //扩容
10             if (newCapacity < minCapacity)
11                 newCapacity = minCapacity;
12             //拷贝数组,生成新的数组
13             elementData = Arrays.copyOf(elementData, newCapacity);
14         }
15     }

5 数组转化为list需要注意的地方

asList() 方法是Arrays的静态方法,可以将数组转化为List

public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}

注意这个参数:T…a,这个参数是一个泛型的变长参数,我们知道基本数据类型是不可能泛型化的,也是就说8个基本数据类型是不可作为泛型参数的。
但是如果将基本类型的数组转换为List也是不会报错的。因为,在传入参数的时候,是数组,数组在java 中会被当做对象,而对象是可以泛型的。
所以我们的程序是把一个int型的数组作为了T的类型,所以在转换之后List中就只会存在一个类型为int数组的元素了。当然如果将int改为Integer,则长度就会变成5了。

当数组装换成List 时,这个list 并不是java.util.ArrayList 而是Arrays工具类的一个内部类:
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
/** 省略方法 **/
}

这个内部类ArrayList并没有提高add的实现方法。在ArrayList中,它主要提供了如下几个方法:

1、size:元素数量

2、toArray:转换为数组,实现了数组的浅拷贝。

3、get:获得指定元素。

4、contains:是否包含某元素。

所以综上所述,asList返回的是一个长度不可变的列表。数组是多长,转换成的列表是多长,我们是无法通过add、remove来增加或者减少其长度的。

 

java数据结构-数组

原文:https://www.cnblogs.com/sgyg/p/10677044.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!