黑马程序员技术交流社区

标题: list<t>和arraylist有什么区别 [打印本页]

作者: 274997322    时间: 2013-6-15 01:13
标题: list<t>和arraylist有什么区别
今天做题分别用到这两个集合,发现都没有问题,但是不知道这两个有什么区别,再选择应该如何取舍?
作者: a767175432    时间: 2013-6-15 01:50
List<T>这个东西就是一个List集合接口,它不能直接new 只能new它的实现类   ArryList是它的实现类之一 顾名思义 它是一个带下标的集合类
<T>是泛型标记 是为了在编译时期就能告诉程序员错误的一种安全机制。
作者: chensc    时间: 2013-6-15 06:45
学习学习!
作者: 高腾    时间: 2013-6-15 07:34
ArrayList集合中的任何引用或值类型都将隐式地向上强制转换为 Object。
对于ArrayList存储值类型时就涉及到装箱和拆箱的过程
在大型集合进行循环访问的时候,装箱和拆箱操作会降低性能

而List<>是一种泛型表示方法,添加的唯一语法是声明和实例化中的类型参数
宏观上看让程序变复杂了,但是却比ArrayList速度快(因为添加的类型相同,处理快,不需要进行转换,比如装箱拆箱之类的操作),安全性能高
作者: 274997322    时间: 2013-6-15 09:33
a767175432 发表于 2013-6-15 01:50
List这个东西就是一个List集合接口,它不能直接new 只能new它的实现类   ArryList是它的实现类之一 顾名思 ...

也就是说list<int> array=new List<int>()这种写法是错的?












作者: a767175432    时间: 2013-6-15 11:10
274997322 发表于 2013-6-15 09:33
也就是说list array=new List()这种写法是错的?

对 因为  这是List是一个接口不能通过new的方式创建其对象 只能new它的实现类再向上转型为List  
例如  List list = new ArrayList();
作者: 关关雎鸠    时间: 2013-6-15 11:26
a767175432 发表于 2013-6-15 11:10
对 因为  这是List是一个接口不能通过new的方式创建其对象 只能new它的实现类再向上转型为List  
例如  L ...

你把人家问的看清楚,不要误人子弟。。
作者: a767175432    时间: 2013-6-15 11:34
关关雎鸠 发表于 2013-6-15 11:26
你把人家问的看清楚,不要误人子弟。。

我是回复他回复我的这句话  List list = new List() 这是错误的
作者: 关关雎鸠    时间: 2013-6-15 11:45
a767175432 发表于 2013-6-15 11:34
我是回复他回复我的这句话  List list = new List() 这是错误的

别人写的是List<int> list = new List<int>();

这有错误吗?
作者: a767175432    时间: 2013-6-15 13:02
关关雎鸠 发表于 2013-6-15 11:45
别人写的是List list = new List();

这有错误吗?

这种写法是错误的 编译都编译不过去  List是一个接口 接口是没有构造器的不允许直接new 只能是new它的实现类向上转型为List类型 你再看看面向对象关于接口方面的知识。纠正一下
作者: 关关雎鸠    时间: 2013-6-15 15:16
本帖最后由 关关雎鸠 于 2013-6-15 15:21 编辑
a767175432 发表于 2013-6-15 13:02
这种写法是错误的 编译都编译不过去  List是一个接口 接口是没有构造器的不允许直接new 只能是new它的实 ...
  1. List<int> list = new List<int>();
  2.             list.Add(1);
  3.             list.Add(2);
  4.             for (int i = 0; i < list.Count; i++) {
  5.                 Console.WriteLine(list[i]);
  6.             }
  7.             Console.ReadKey();
复制代码
你把这放到VS中试试,看能不能用。。

不知道你哪儿看的List<T>是接口。。它是继承接口的类并不是接口。

QQ拼音截图未命名.png (12.14 KB, 下载次数: 0)

QQ拼音截图未命名.png

作者: a767175432    时间: 2013-6-15 15:19
关关雎鸠 发表于 2013-6-15 15:16
你把这放到VS中试试,看能不能用。。

哎呀。。。我错了  我进错专区了不好意思  我的观点是java上的 java是不允许new接口的
作者: 无__畏    时间: 2013-6-15 15:56
本帖最后由 无__畏 于 2013-6-15 16:14 编辑

。。。。...
作者: 无__畏    时间: 2013-6-15 16:07
本帖最后由 无__畏 于 2013-6-15 16:10 编辑

ArrayList存入对象时类型为Object,编译时候不检查类型,使用时候会有频繁的拆箱装箱。 arraylist就当是一种复杂的数组,只不过比数组多了一些操作add、remove等。  
而List<t>  必须制定t的类型,类型一致,效率要高。是一个泛型集合






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2