Java数组
来源:互联网 发布:用友网络股票行情走势 编辑:程序博客网 时间:2024/06/13 21:30
数组与其他容器对比:效率 类型 保存基本类型的能力。
数组是效率最高的存储和随机访问对象引用序列的方式。访问的复杂度为O1,一步到位。但是代价是大小固定。对比ArrayList数组仅有的优点就是速度了(ArrayList底层也是数组)。
数组声明后会自动创建成员,如果是基本数据类型则是其默认值,如果是个对象,则是null。
数组对象具有一个唯一的属性就是length。
数组声明new Object[n]
; {xx,x,x,xxx}
多维数组可以{{x,x},{xx,xx}}
创建泛型数组是不行的,new T[10],原因数组是允许父类数组赋值为子类数组,也就是说动物[5]=new猪[5]是可以的。List[] arr = new ArrayList [10]; 如果能创建泛型数组则这个式子通过,另外有个Object[] arr2被初始化了,并且我们令arr2=arr父子关系,可以这么写的。然后arr2[0]=1;然后发现arr[0]被强行变成了1,这个int类型而不是原来的Object类型。因为泛型是为了安全,所以这个初衷出发的话,禁止了泛型数组,但是List[] arr2 = new ArrayList [10];这样写却没报错,这样写arr2其实是个泛型数组。
List<String>[] arr2 = new ArrayList [10]; arr2[0]=new ArrayList<>(); arr2[0].add("hahhaa"); System.out.println(arr2[0]); Object[] a=new Object[10]; a=arr2; a[0]=10; System.out.println(arr2[0]);
这段代码是模拟刚才那种假设,编译无措,但有个警告:
警告: [unchecked] 未经检查的转换 List<String>[] arr2 = new ArrayList [10]; ^ 需要: List<String>[] 找到: ArrayList[] 1 个警告
但是运行时a[0]=10这行就出错了。ArrayStoreException
结论就是泛型数组不推荐使用,虽然可以用一种有警告的形式使用,但不正当使用会出错。
Arrays.fill(arr,val)
可以将数组所有的值设为val。
System.arraycopy(src,srcstart,des,desstart,length)
将src从srcstart取length个拷贝到des从desstart开始length个,注意任何一个数组产生越界都会报错,不管是src拿不出这么多还是des没这么多位子。!!!注意:这种复制方式之所以速度很快是因为执行的是浅复制,即如果是对象的话,复制的是对象的引用。但实际测试却是深复制,一个新的对象具有相同的值。和书上说的不一样。
Array.toString(arr)
可以很好地打印数组。
数组的equals
方式,是每个元素equals返回true才是true。
比较(排序sort):我们有时候会对数组进行排序,这时候我们需要对数组里的类实现一个Comparable接口(也可以是泛型的),这个接口要求重写compareTo(Object x)方法返回值是int于是可以使用Arrays.sort(arr)
进行排序,这个排序直接改变数组本身。或者使用更好的非侵入式的重载Arrays.sort(arr,new Comparator)
这里使用的Comparator需要重写compare方法。这种写法是非侵入式的。
小结:
我们需要知道的是数组是一种古老的数据类型,存取速度快速是他的优点。泛型数组是不被允许的写法,应该了解下这样做的原因。Arrays封装了一些好用的静态方法: toString可以更好的打印数组 equals可以判断每个元素最后返回是否相等 以上是对Object中重写的方法 sort可以根据自然顺序或者自定义Comparator进行排序,直接改变数组本身 fill可以快速填充数组所有项为某个值System.arraycopy可以进行数组间的值复制
- java数组添加数组
- java数组添加数组
- Java数组-二维数组
- 【Java】数组--二维数组
- java-数组/二维数组
- Java数组、遍历数组
- java数组
- JAVA数组
- JAVA数组
- JAVA数组
- Java数组
- Java数组
- java数组
- java数组
- java数组
- Java--数组
- Java数组
- java 数组
- HDU 2544 最短路(dijkstra,Floyd,spfa)
- JS 学习笔记-1
- 欢迎使用CSDN-markdown编辑器
- 浅入浅出TensorFlow 8
- 封装扩展Kendo UI Grid
- Java数组
- 349. Intersection of Two Arrays
- JAVA多线程—并发库中对“数字”的支持
- java.lang.OutOfMemoryError: GC overhead limit exceeded
- 标准STL中list的各个接口的使用
- expdp和impdp
- [LeetCode]264. Ugly Number II
- 计算π的值(难度系数:半颗星)
- linux设置安装的服务自动启动