Java集合框架简介


Java集合框架具有高性能、高效的特点,并允许不同类型的集合,以相似的方式来操作,同时也提供了标准接口来实现扩展。

Java集合框架为不同类型的集合提供了大量接口,可以这么说整个集合框架就围绕着这一组标准接口而设计。

Java集合框架的接口

集合框架有两个基本接口:CollectionMap,此外还有一个迭代器接口:Iterator,及一个标记接口:RandomAccess

一、Collection接口和Map接口

Java 集合框架主要包括两种类型的容器:一种是保存独立元素的序列(Collection),一种是保存成对的“键值对”对象(Map)。

1.Collection接口

Collection中,有些集合允许有重复元素,有些不允许有重复元素;有些元素有序,有些元素无序。
Collection接口有 3 种子类型,分别是:ListSetQueue

(1)List

List接口是一个有序的集合,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中的位置,类似于数组的下标)来访问List中的元素,并且,第一个元素的索引为0,而且允许有相同的元素。
List接口存储一组不唯一且有序(插入顺序)的对象。

List有两种类型:

  • ArrayList
    • 最基本、最常用
    • 擅长随机访问元素
    • List中间插入、移除元素时较慢
    • 底层由数组实现
  • LinkedList
    • 不常用
    • 在随机访问元素时较慢
    • List中间插入和移除元素时代价较低
    • 底层由双向链表实现
(2)Set

Set不保存重复的元素,它具有与Collection完全一样的接口,因此它没有任何额外的功能。
Set接口存储一组唯一且无序的对象。

Set常用的有两种类型:

  • HashSet
    • 常用
    • 查找速度快
    • 无序
  • TreeSet
    • 不常用
    • 查找速度不如HashSet
    • 有序(采用红黑树存储)

由于TreeSet内部结构支持排序,并且我们可能还会有迭代的操作,因此使用TreeSet要比使用HashSet更合适。

(3)Queue

Queue(队列)是一种较为特殊的线性表,它是典型的先进先出的容器。即从容器的一端放入事物,从另一端取出,并且事物放入容器的顺序和取出的顺序是相同的。也可以说,队列只允许在表的前端进行删除操作,而在表的后端进行插入操作。

Queue接口没有具体的实现,通常有两种方式来实现它。一是使用循环数组;另一种是通过链表。
LinkedList提供了方法来支持队列的行为,并且实现了Queue接口。

2.Map接口

Map接口存储的是一组键值对象,提供key(键)到value(值)的映射。其中,value(值)可以是任意的容器,甚至也可以是另一个Map.

Map接口的实现有很多,根据特性的不同,效率的高低,保存的形式及多线程方面的考虑,分为了多种实现方式,包括:

  • HashMap
    • 基于散列表的实现,插入和查询键值对的开销是固定的,可以通过构造器设置容量和负载因子
  • TreeMap
    • 基于红黑树的实现,查看键值对或键时会被排序
  • LinkedHashMap
    • 类似于HashMap,但是其使用链表维护内部次序,因此,在迭代访问时速度快
  • ConcurrentHashMap
    • 线程安全的Map,不涉及同步加锁
  • WeakHashMap
    • 弱键映射,允许释放映射所指向的对象,专为解决特殊问题而设计
  • IdentityHashMap
    • 使用==代提equals()对键进行比较的散列映射,专为解决特殊问题而设计

二、Iterator接口

Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代集合。
迭代器是一种轻量化的对象,创建它的代价非常小,但是也正是因为其创建代价小,而使得其限制多。例如,只能单向移动,使用next()获得序列中的下一个元素,使用hasNext()检查序列中是否还有元素,使用remove()将迭代器新近返回的元素删除。
使用迭代器来遍历集合,是真正的统一了对集合的访问方式,因为它遍历集合的操作与集合底层的结构做到了分离。

需要注意的是,虽然Iterator只能向前移动,但是其子类型,ListIterator却可以双向移动。它可以产生相对于迭代器在集合中指向的当前位置的前一个和后一个元素的索引,并且可以使用set()替换它访问过的最后一个元素。


三、RandomAccess接口

这个接口不包含任何方法,只是用来测试一个特定的集合是否支持高校的随机访问。


·

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值