从头认识java-14.1 再次对照数组与容器
这一章节我们再次深入的对照数组与容器。
数组与容器主要集中在三个方面:效率、类型、基础类型。
我们能够从三方面做出对照。
1.效率
这里的下来是指add和get 的速度
以下以add为例:
package com.ray.ch13;
import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		Integer zero = new Integer(0);
		ArrayList<Integer> list = new ArrayList<Integer>();
		long startTime = System.currentTimeMillis();
		for (int i = 0; i < 1000000; i++) {
			list.add(zero);
		}
		long endTime = System.currentTimeMillis();
		System.out.println(endTime - startTime);
		Integer[] integers = new Integer[1000000];
		startTime = System.currentTimeMillis();
		for (int i = 0; i < 1000000; i++) {
			integers[i] = zero;
		}
		endTime = System.currentTimeMillis();
		System.out.println(endTime - startTime);
		System.out.println("----------------");
		Integer[] integers2 = new Integer[1000000];
		startTime = System.currentTimeMillis();
		for (int i = 0; i < 1000000; i++) {
			integers2[i] = zero;
		}
		endTime = System.currentTimeMillis();
		System.out.println(endTime - startTime);
		ArrayList<Integer> list2 = new ArrayList<Integer>();
		startTime = System.currentTimeMillis();
		for (int i = 0; i < 1000000; i++) {
			list2.add(zero);
		}
		endTime = System.currentTimeMillis();
		System.out.println(endTime - startTime);
	}
}
输出:
26
2
----------------
2
29
从结果能够看见,明显是数组的快非常多,可是有一点须要注意的是,我们上面的代码要排除两点,一是放入的对象要先建立好。二是容器或者数组也要先建立好,单纯的对照add的速度,不然会有偏差。笔者在这里饶了20几分钟才绕出来。才得到最后想要的结果。
效率是数组胜出,可是数组牺牲了扩容的能力。容器尽管败了,可是它得到的是扩容的能力,就是由于须要这个扩容能力,才牺牲了效率。
可是,对于普通的应用。仅仅有几十个或者几百个对象的操作,推荐容器,由于这里面的效率损失全然能够忽略不计。
2.类型
在前面我们已经举过相关的样例,数组是类型安全的,容器有可能类型不安全。
样例:
package com.ray.ch13;
import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		list.add(1);
		list.add("1");
		Integer[] integers = new Integer[10];
		integers[0] = 0;
		// integers[1]="1";//error
	}
}
3.基础类型
数组支持基础类型,而容器不支持。
样例:
package com.ray.ch13;
public class Test {
	public static void main(String[] args) {
		// ArrayList<int> list = new ArrayList();//error
		int[] arr = new int[10];
	}
}
4.总的来说
笔者还是推荐使用容器。由于java的容器已经具备数组的全部操作,并且还做出了扩展。这个对于编程来说非常重要,减少了编程的复杂程度。
当然,假设是上面的实验性的东西。另当别论。
总结:我们上面从三方面对照了数组和容器。以及举例说明。
这一章节就到这里,谢谢。
-----------------------------------
从头认识java-14.1 再次对照数组与容器的更多相关文章
- Java 14 令人期待的 5 大新特性,打包工具终于要来了
		随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述. Java 13刚刚发布给开发人员使用不久,最新版本的JDK于2019年9月发 ... 
- 从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?
		这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { pub ... 
- Java 14带来了许多新功能
		本文是作者翻译自java magazine的文章,我也将回持续的关注java的最新消息,即时和大家分享.如有翻译不准确的地方,欢迎大家留言,我将第一时间修改. Java 14包含比前两个发行版更多 ... 
- Java基础语法Day_05(数组的概念)
		第14节 数组 day05_01_数组的概念 day05_02_数组的定义格式一_动态初始化 day05_03_数组的定义格式二_静态初始化 day05_04_数组的定义格式三_省略的 ... 
- Java IO: 字节和字符数组
		原文链接 作者: Jakob Jenkov 译者:homesick 内容列表 从InputStream或者Reader中读入数组 从OutputStream或者Writer中写数组 在java中 ... 
- Java将文件转为字节数组
		Java将文件转为字节数组 关键字:文件,文件流,字节流,字节数组,二进制 摘要:最近工作中碰到的需求是,利用http传输二进制数据到服务器对应接口,需要传输userId, file(加密后)等一系列 ... 
- Java数据结构和算法之数组与简单排序
		一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ... 
- Java编程思想学习(十二) 数组和容器
		一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ... 
- Jni中C++和Java的参数传递  参数对照
		Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用V ... 
随机推荐
- 【Luogu】P2057善意的投票(最小割转最大流)
			题目链接 也算水题一道吧,不过Round1感性理解一下就xjb建了个图,40 Round2仔细分析了一会,理性建了个图,90 然后分析了半天……改大数组就A了…… 从S到所有值为1的点连一条inf的边 ... 
- HDU——1393Weird Clock(水题,注意题意)
			Weird Clock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ... 
- 博彩游戏(tyvj 1519)
			背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的子串,那么就中奖了,否 ... 
- hdu 5437(优先队列模拟)
			Alisha’s Party Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ... 
- (1)TensorFlow 概要
			TensorFlow:翻译成中文 张量流 计算图:又被称为有向图.数据流图 数据流图用结点和线的有向图来描述数学计算,节点一般用来表示施加的数学操作,也可以用来数据输入起点.输出终点,或者读取写入持久 ... 
- spring mvc表单的展现、输入处理、校验的实现
			之前已经实现了spring mvc的入门例子及如何处理带参数的请求Controller编写.本文主要记录: 1)重定向请求 2)处理路径中含有变量的请求 3)使用JSR-303进行校验 ① 首先,编写 ... 
- Java---详解方法传值问题
			过程解析: 1.首先执行int[] arr={3,5,6,1,7,9,0},遇到数组先执行等式右边的,{3,5,6,1,7,9,0}会在堆内存中开辟一块空间,分成7小块,下标分别从0~6,先进行系统初 ... 
- error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":解决方案
			我是在安装scrapy时遇到这个问题的,安装其他组件也可能会遇到.但问题解决办法都是大致相同的. 以安装scrapy为例: 在pycharm中安装twisted时出现: error: Microsof ... 
- Extjs Ext.grid.column.Column 自适应内容
			var griddb = Ext.ComponentQuery.query("Ali_DeliveryAuthorityList"); griddb = griddb[griddb ... 
- android 根据图片名字获取图片id
			public int getResource(String imageName){ Context ctx=getBaseContext(); int resId = getResources().g ... 
