当前位置:网站首页 > Java教程 > 正文

java分类列表教程



简化的集合框架图如下:

List是一个接口:

 

ArrayList是最常用的一种List的子类(当然也实现了其他接口,也继承了父类)。

 

ArrayList用法类似于数组,且其容量可按需要动态调整,亦被称为动态数组。

示例:泰国旅行团
本示例展示了在List中使用泛型的必要性。
设定:泰国旅行团,约定只收Girl,有一个Boy混入,编译没问题,接机(输出)时按Girl接收,会出错。

 

代码没错,运行出错(对象本是Boy类型,偏要转成Girl类型---类型转换异常)

Exception in thread "main"

java.lang.ClassCastException

JDK 1.5之后,引入了泛型,可指定列表内元素的类型。类型不符合的元素不允许加入数组,这样就能再编译阶段发现错误,避免运行时出错的尴尬。

 
 

迭代器原理gif:https://www.cnblogs.com/tigerlion/p/10706386.html

Collection相关方法

这些方法属于Collection类,可以被子类继承,因此通用性较强,不仅List能用,Set也能用。

返回类型 方法名称 描述 boolean add(Object o) 添加元素 int size() 获取元素个数 boolean contains(Object o) 判断是否存在指定元素 boolean remove(Object o) 删除元素 void clear() 清空 boolean isEmpty() 判空 Object[] toArray() 集合转数组
 

List相关方法

返回类型 方法名称 描述 void add(int index, E element) 指定位置添加元素 int indexOf(Object o) 获取指定元素的索引 E set(int index, E element) 替换指定位置的元素,返回更新前的元素 E get(int index) 获取指定索引的元素 E remove(int index) 删除指定索引的元素
 

源码浅析:

ArrayList底层是通过数组实现,查询快、增删慢。API文档上说ArrayList不是同步的,即多线程环境下不安全,但是效率高。

ArrayList每次扩容至1.5倍。

 

和ArrayList用法一致。

元素超过它的初始大小 线程安全 效率 ArrayList *150% × Vector *200%

Vector是一个比较老的类,在JDK 1.0即已出现,不推荐使用(蓝桥杯的练习题中出现过Vector,在那道题中只要知道它的用法和ArrayList一样就行)。

虽然Vector是线程安全的,但是在线程安全方面也不推荐使用。推荐方案如下:

 

ArrayList使用数组实现,查询快,增删慢;
LinkedList使用链表实现,查询慢,增删快,适用于经常插入、删除大量数据的场合,适合采用迭代器Iterator遍历。
如果仅仅是在列表末尾插入数据,LinkedList的效率低于ArrayList,因为LinkedList调用add时需要创建对象,而ArrayList只是在容量不够时才扩容。

LinkedList实现了List和Deque(双端队列)接口。

 

特色方法(此时不能使用多态):

特色方法 解释 addFirst() 头部添加 addLast() 尾部添加 removeFirst() 头部删除 removeLast() 尾部删除 push() 入栈,等效于addFirst() pop() 出栈,等效于removeFirst() offer() 入队列,等效于addLast() poll() 出队列,等效于removeFirst()
 

[B, A]
[B, A, A, B]
栈[B, A]
队列[B, C]


  • 栈:先进后出
  • 队列:先进先出

Deque(双端队列),是Queue的子接口,其实现类ArrayDeque和ArrayList的实现机制相似,使用Object[]数组存储集合元素,当容量不足时,可以重新分配数组。

ArrayDeque可以当做栈和队列使用。

 

运行结果:


                            

版权声明


相关文章:

  • 餐厅系统java教程2025-03-27 23:34:03
  • java教程 出版社2025-03-27 23:34:03
  • java教程 iso2025-03-27 23:34:03
  • java nio系列教程 pdf2025-03-27 23:34:03
  • java编程符教程2025-03-27 23:34:03
  • 免费看java视频教程2025-03-27 23:34:03
  • java编程教程新手2025-03-27 23:34:03
  • 高级JAVA教程视频2025-03-27 23:34:03
  • 安装java网站教程2025-03-27 23:34:03
  • echarts 教程 java2025-03-27 23:34:03