Asp.Net(C#.VB)Array、ArrayList和List的区别
Asp.Net(C#.VB)Array、ArrayList和List的区别
数组:固定长度的一段内存。
ArrayList:可以理解为可以动态增加内存的数组,是一种链表。
List是一种范型链表,解决了ArrayList对于值类型需要装箱拆箱的缺点。
数组就是值对象,它存储数据元素类型的值的一系列位置。Arraylist和List可以提供添加、删除等操作的数据。
泛形中的元素类型是固定的。
比如:
ArrayList a = new ArrayList ();
a.add(1);
a.add("aaaa");
a.add(new class());
Arraylist中可以添加任何类型的元素。
如果定义的是泛形的话
List <MyClass > myclasslist = new List <MyClass >
MyClassList.add(new MyClass());
泛形中就不能再添加别的类型的,它只能添加MyClass类型的实例。
这样做的好处是:当读取和存储操作时,可以减少因为折箱和装箱带的类型转换的性能损失。
泛型的好处:
通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务从您转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译时强制使用正确的数据类型。减少了类型强制转换的需要和运行时错误的可能性。泛型提供了类型安全但没有增加多个实现的开销。
List是一个接口,而ListArray是一个类。
ListArray继承并实现了List。
所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造。
List list; //正确 list=null;
List list=new List(); //??? 是错误的用法
这两处结果是是有差别的。
List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。 而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。
这是一个例子:
import java.util.*;
public class TestList{
public static void main(String[] args){
List list = new ArrayList();
ArrayList arrayList = new ArrayList();
list.trimToSize();
arrayList.trimToSize();
}
}
编译一下就知道结果了。
如果这个样子:
List a=new ArrayList();
则a拥有List与ArrayList的所有属性和方法,不会减少
如果List与ArrayList中有相同的属性(如int i),有相同的方法(如void f()),
则a.i是调用了List中的i
a.f()是调用了ArrayList中的f();
问题的关键:
为什么要用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?
问题就在于List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 LinkedList或者Vector等等,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了List地方的代码根本不需要改动。
假设你开始用 ArrayList alist = new ArrayList(),这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。
List是一个接口,针对接口编程,
List list = new ArrayList();
这其实是创建了一个ArrayList对象,但他被向上转型到List类型了,所以ArrayList在List里没有的方法都不能用了,但最终他还是个ArrayList类型,代码:
List list = new ArrayList();
System.out.println(list.getClass());
Asp.Net(C#.VB)Array、ArrayList和List的区别相关推荐
- java array arraylist
1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array". 2)Array([]):最高效:但是其容量固定且无法动态改变: ArrayList: ...
- java中ArrayList和LinkedList的区别
首先来看ArrayList和LinkedList的集成类和接口的区别.// lang java public class ArrayList<E> extends AbstractList ...
- java集合框架05——ArrayList和LinkedList的区别
前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...
- Java集合系列---List源码解析(ArrayList和LinkedList的区别)
List源码主要讲ArrayList,LinkedList,Vector三个类 1 ArrayList ArrayList是一个底层基于数组的集合, 首先来看一下它的继承关系, public clas ...
- ASP.NET Get和Post两种提交的区别
表单form的提交有两种方式,一种是get的方法,一种是post 的方法.看下面代码,理解ASP.NET Get和Post两种提交的区别: < form id="form1" ...
- 浅谈Java语言中ArrayList和HashSet的区别
Java语言中ArrayList和HashSet的区别 2019-04-10 13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...
- java中ArrayList与LinkedList的区别
一.背景 面试题中经常会被面试官问到ArrayList和LinkedList的区别,下面从源码角度来对他们进行一下简单的阐述,相信会对它们有一个更全面深入的了解. 首先,ArrayList和Linke ...
- 请你简单介绍一下ArrayList和LinkedList的区别及大数据量情况下的插入效率对比
请你简单介绍一下ArrayList和LinkedList的区别 ArrayList采用数组实现的,查找元素的效率比LinkedList高. LinkedList采用双线链表实现,插入和删除的效率比Ar ...
- ArrayList和Vector的区别
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素, ...
- java集合框架之ArrayList与LinkedList的区别
参考http://how2j.cn/k/collection/collection-arraylist-vs-linkedlist/690.html#nowhere ArrayList和LinkedL ...
最新文章
- 【HDU 1501】Zipper(记忆化搜索)
- JavaWeb 入门篇(3)ServletContext 详解 具体应用
- 如何用conda安装软件|处理conda安装工具的动态库问题
- 动态规划 —— 01背包问题
- 表单的get和post使用情景
- 159个故事串起三千年大历史!这套“儿童版史记”太无敌了!
- maven排除依赖冲突问题
- oracle 找不到程序,Oracle 找不到监听程序
- 连载13:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
- make *** 没有指明目标并且找不到 makefile。 停止。_“关系红利”时代《请停止无效社交》,关键朋友是你的价值选择...
- 【Matlab】Matlab2014修改默认工作目录
- 用matlab做bp神经网络预测,matlab人工神经网络预测
- python装饰器两层和三层区别,Python装饰器和装饰器图案有什么区别?
- EdgeBox_EHub_tx1_tx2_E100 系统网络调试链接说明
- 阿里云RDS数据库与自建数据库做主从同步
- prometheus监控域名证书到期时间
- 分布式全文搜索引擎——Elasticsearch
- 计算机毕业设计Java钢材商贸公司网络购销管理系统(源码+系统+mysql数据库+lW文档)
- javascript 判断美国现在是冬令时、夏令时
- 17.3 逻辑字体
热门文章
- 用Not Exists 代替Not In
- C++实现 逆波兰表达式计算问题
- php://input
- Get Intellisense for .axml files in Visual Studio
- 18.Linux/Unix 系统编程手册(上) -- 目录与链接
- 14.卷2(进程间通信)---System V 共享内存区
- 47. Magneto Transaction Email(1)
- 2.Mysql数据库的优化技术(1)
- js对文字的修饰 big() small() fixed() toUpperCase() toLowerCase()
- [BZOJ 5074]小B的数字