集合概述
简化的集合框架图如下:

List·列表

ArrayList
List是一个接口:
讯享网ArrayList是最常用的一种List的子类(当然也实现了其他接口,也继承了父类)。
讯享网
ArrayList用法类似于数组,且其容量可按需要动态调整,亦被称为动态数组。
示例:泰国旅行团
本示例展示了在List中使用泛型的必要性。
设定:泰国旅行团,约定只收Girl,有一个Boy混入,编译没问题,接机(输出)时按Girl接收,会出错。
代码没错,运行出错(对象本是Boy类型,偏要转成Girl类型---类型转换异常)
Exception in thread "main"
java.lang.ClassCastException
ArrayList<E>使用泛型
JDK 1.5之后,引入了泛型,可指定列表内元素的类型。类型不符合的元素不允许加入数组,这样就能再编译阶段发现错误,避免运行时出错的尴尬。
讯享网
遍历
迭代器原理gif:https://www.cnblogs.com/tigerlion/p/10706386.html
更多方法
Collection相关方法
这些方法属于Collection类,可以被子类继承,因此通用性较强,不仅List能用,Set也能用。
List相关方法
源码浅析:
ArrayList底层是通过数组实现,查询快、增删慢。API文档上说ArrayList不是同步的,即多线程环境下不安全,但是效率高。
ArrayList每次扩容至1.5倍。
Vector
和ArrayList用法一致。
Vector是一个比较老的类,在JDK 1.0即已出现,不推荐使用(蓝桥杯的练习题中出现过Vector,在那道题中只要知道它的用法和ArrayList一样就行)。
虽然Vector是线程安全的,但是在线程安全方面也不推荐使用。推荐方案如下:
LinkedList
ArrayList使用数组实现,查询快,增删慢;
LinkedList使用链表实现,查询慢,增删快,适用于经常插入、删除大量数据的场合,适合采用迭代器Iterator遍历。
如果仅仅是在列表末尾插入数据,LinkedList的效率低于ArrayList,因为LinkedList调用add时需要创建对象,而ArrayList只是在容量不够时才扩容。
LinkedList实现了List和Deque(双端队列)接口。
特色方法(此时不能使用多态):
[B, A]
[B, A, A, B]
栈[B, A]
队列[B, C]
*ArrayDeque·栈和队列
- 栈:先进后出
- 队列:先进先出
Deque(双端队列),是Queue的子接口,其实现类ArrayDeque和ArrayList的实现机制相似,使用Object[]数组存储集合元素,当容量不足时,可以重新分配数组。
ArrayDeque可以当做栈和队列使用。
运行结果:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/4265.html