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的区别相关推荐

  1. java array arraylist

    1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array". 2)Array([]):最高效:但是其容量固定且无法动态改变:      ArrayList: ...

  2. java中ArrayList和LinkedList的区别

    首先来看ArrayList和LinkedList的集成类和接口的区别.// lang java public class ArrayList<E> extends AbstractList ...

  3. java集合框架05——ArrayList和LinkedList的区别

    前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...

  4. Java集合系列---List源码解析(ArrayList和LinkedList的区别)

    List源码主要讲ArrayList,LinkedList,Vector三个类 1 ArrayList ArrayList是一个底层基于数组的集合, 首先来看一下它的继承关系, public clas ...

  5. ASP.NET Get和Post两种提交的区别

    表单form的提交有两种方式,一种是get的方法,一种是post 的方法.看下面代码,理解ASP.NET Get和Post两种提交的区别: < form id="form1" ...

  6. 浅谈Java语言中ArrayList和HashSet的区别

    Java语言中ArrayList和HashSet的区别 2019-04-10   13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...

  7. java中ArrayList与LinkedList的区别

    一.背景 面试题中经常会被面试官问到ArrayList和LinkedList的区别,下面从源码角度来对他们进行一下简单的阐述,相信会对它们有一个更全面深入的了解. 首先,ArrayList和Linke ...

  8. 请你简单介绍一下ArrayList和LinkedList的区别及大数据量情况下的插入效率对比

    请你简单介绍一下ArrayList和LinkedList的区别 ArrayList采用数组实现的,查找元素的效率比LinkedList高. LinkedList采用双线链表实现,插入和删除的效率比Ar ...

  9. ArrayList和Vector的区别

    这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素, ...

  10. java集合框架之ArrayList与LinkedList的区别

    参考http://how2j.cn/k/collection/collection-arraylist-vs-linkedlist/690.html#nowhere ArrayList和LinkedL ...

最新文章

  1. 【HDU 1501】Zipper(记忆化搜索)
  2. JavaWeb 入门篇(3)ServletContext 详解 具体应用
  3. 如何用conda安装软件|处理conda安装工具的动态库问题
  4. 动态规划 —— 01背包问题
  5. 表单的get和post使用情景
  6. 159个故事串起三千年大历史!这套“儿童版史记”太无敌了!
  7. maven排除依赖冲突问题
  8. oracle 找不到程序,Oracle 找不到监听程序
  9. 连载13:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
  10. make *** 没有指明目标并且找不到 makefile。 停止。_“关系红利”时代《请停止无效社交》,关键朋友是你的价值选择...
  11. 【Matlab】Matlab2014修改默认工作目录
  12. 用matlab做bp神经网络预测,matlab人工神经网络预测
  13. python装饰器两层和三层区别,Python装饰器和装饰器图案有什么区别?
  14. EdgeBox_EHub_tx1_tx2_E100 系统网络调试链接说明
  15. 阿里云RDS数据库与自建数据库做主从同步
  16. prometheus监控域名证书到期时间
  17. 分布式全文搜索引擎——Elasticsearch
  18. 计算机毕业设计Java钢材商贸公司网络购销管理系统(源码+系统+mysql数据库+lW文档)
  19. javascript 判断美国现在是冬令时、夏令时
  20. 17.3 逻辑字体

热门文章

  1. 用Not Exists 代替Not In
  2. C++实现 逆波兰表达式计算问题
  3. php://input
  4. Get Intellisense for .axml files in Visual Studio
  5. 18.Linux/Unix 系统编程手册(上) -- 目录与链接
  6. 14.卷2(进程间通信)---System V 共享内存区
  7. 47. Magneto Transaction Email(1)
  8. 2.Mysql数据库的优化技术(1)
  9. js对文字的修饰 big() small() fixed() toUpperCase() toLowerCase()
  10. [BZOJ 5074]小B的数字