大家说说使用ArrayList和泛型List的异同和场合。

康斯坦汀 2011-12-08 08:25:32
我知道ArrayList放进去的是Object,存取有装箱拆箱,所以效率似乎不如泛型的List<T>.
但仍有很多新的代码(不是为了兼容)使用ArrayList而不是泛型。请大家分析一下,
ArrayList相比泛型的优点有哪些?什么场合用ArrayList而不是泛型呢?
...全文
258 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cherish_55 2011-12-09
  • 打赏
  • 举报
回复
arraylist 确实过时了,现在到处都用list<t>。。。。。。
康斯坦汀 2011-12-09
  • 打赏
  • 举报
回复
13楼做过测试么? ArrayList一定比List<T>慢么? MSDN也没说ArrayList慢。
MSDN只是说对于值类型,List<T>快,对于引用类型,两者性能一样。

凋零的老树 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ohkuy 的回复:]
引用楼主 r3000 的回复:
ArrayList相比泛型的优点有哪些?什么场合用ArrayList而不是泛型呢?

1.毫无优势
2.怀旧的人喜欢用ArrayList
[/Quote]

对,ArrayList完全可以被IList取代,但是泛型的优点,在实际中,其实也是没有任何意义的,说白了不就是ArrayList的效率低点,也可以理解为速度慢点,IList<T> 确实是能快一点,但是快的那点时间,我们人好像都感觉不出来。
反过来,如果弄个IList<T> 感觉代码不如ArrayList优雅。
所以明明知道ArrayList效率不行,但是还是用ArrayList,因为极大部分的场景是无所谓效率的
康斯坦汀 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cuthkid 的回复:]

有了泛型后,就不要用ARRAYLIST了~~~
[/Quote]

不同意,ArrayList有它的使用场合。
wushuai1346 2011-12-09
  • 打赏
  • 举报
回复
不同的场景使用不同的类型,这个很同意.应该说大部分的场景下list<T>都比ArrayList要有效率和优雅,不过很想知道ArrayList到底使用于什么样的场合.希望r3000可以详细讲解一下,洗耳恭听
ascendlin 2011-12-08
  • 打赏
  • 举报
回复
不清楚
farmer0111 2011-12-08
  • 打赏
  • 举报
回复
我平时用arraylist的比list多一点。。。
bastenf 2011-12-08
  • 打赏
  • 举报
回复
具备泛型的优势:类型安全性, 性能提升(不用拆装箱), 二进制代码重用。。
ohkuy 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 r3000 的回复:]
ArrayList相比泛型的优点有哪些?什么场合用ArrayList而不是泛型呢?
[/Quote]
1.毫无优势
2.怀旧的人喜欢用ArrayList
liu513133872 2011-12-08
  • 打赏
  • 举报
回复
List<T> 就是具备泛型的特点,ArrayList是可变数组,什么时候用哪个:List<T>类型安全性点,实际上真是用起来很多时候都可以通用,只是对类进行排序最好用 List<T>。高人如何解答..
q107770540 2011-12-08
  • 打赏
  • 举报
回复
区别很多,比如类型安全性
andyalex 2011-12-08
  • 打赏
  • 举报
回复
ArrayList相比List的优点,就是能存放不同类型的嘛,
能用List<T>的就用List<T>
jiuhexuan 2011-12-08
  • 打赏
  • 举报
回复
ArrayList已经不推荐使用,有了泛型,基本无用武之地。
不是一个时代的产物,
大多数场景不会用object还做变量,必然拆装箱。
dean615 2011-12-08
  • 打赏
  • 举报
回复
有了泛型后,就不要用ARRAYLIST了~~~
康斯坦汀 2011-12-08
  • 打赏
  • 举报
回复
8楼贴的文章写的不好,测试的程序有很多漏洞。不严谨没有说服力。
Java Web 程序设计教程 30 Student s=list.get(i);// System.out.println(s.getSno()+"," +s.getSname()+","+s.getScore()); } 其中,第 行部分在定义 List 时定义了泛型,保证 List 中的元素都是 Student 类型。因此在 第 行部分在取出 List 中的元素时就不需要再强制转换了。 另外,在前面的比较接口中也可以使用泛型,例如例 3.3 的 MyCmp 类还可以这样来实现, 请看如下语句。 public class MyCmp implements Comparator{ public int compare(Student s1, Student s2){ …… } } 总之,泛型其实是在集合创建时就设定集合中放置何种类型的对象。这样以后读出元素时就 不需要强制转换了。如果不是泛型,那么无论向集合中添加何种对象都当作对象 Object,所以取 出来也是 Object,因此需要强制转换。 本章小结 本章主要介绍了 Java 集合框架。集合是数据在缓存中存储的一个重要方式。学习本章知识, 你要深刻理解集合原理以及各种集合的区别:为什么有那么多类型不同的集合。其实,各种集合 使用场合是不一样的,因此,要注意区分 Set、List 和 Map 接口之间的异同。在 Java EE 中对数据 进行存储时都可以考虑集合。但要依据存储要求不同(如读优先还是写优先)选择适合的集合类 型。此外,本章还介绍了 Java 泛型编程。限于篇幅,我们没有详细研究泛型编程技术。如果要深 入了解泛型编程,请查阅相关资料。 习 题 上机实践 1.将本学期开设的课程名称加入到 HashSet 中,并使用迭代器遍历输出。 2.调试书本上 TreeSet 的例子,理解其原理。 3.完成以下实验: (1)定义一个学生类:属性有学号、姓名、专业、高数成绩、外语成绩、Java 课程成绩。 (2)在测试类中生成多个学生类的对象,放入 TreeSet 中,要求按照 3 门课总成绩从高到低 排序,总成绩相等按学号排序。输出排序结果。 注意实现 Comparator 接口的 compare(Object obj1,Object obj2)函数。 4.以 List 接口对象(ArrayList)为基础建立一个通信录,要求通信录中必须含有编号、姓名, 性别、电话、地址、Email 等。实现该类并包含添加、删除、修改、按姓名查等几个方法。编写 主程序测试。 参考如下。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧