Java集合框架

什么是集合框架

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口interfaces 和其实现类 classes。
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD 。

类和接口总览

在这里插入图片描述

接口 interfaces

基本关系说明

在这里插入图片描述
1.Collection :用来存储管理一组对象 objects ,这些对象一般被成为元素 elements.

  • set:元素不能重复,背后隐含着查找/搜索的语义
    SortedSet : 一组有序的不能重复的元素
  • List : 线性结构
  • Queue:队列
  • Deque:双端队列

2.Map : 键值对 Key-Value-Pair ,背后隐含着查找/搜索的语义

  • SortedMap:一组有序的键值对

Iterable接口

  • 实现该接口允许对象成为"foreach"语句的目标,即该集合对象允许迭代。
  • 类集接口Collection是Iterable的子接口,所以所有类集对象可以迭代访问,而映射Map不行。
  • 方法
    Iterator iterator()
    功能:返回一个在一-组T类型的元素上进行迭代的迭代器

迭代器是实现了Iterator/Listlterator接口的类的对象,可以通过遍历类集,访问操作其中的每个元素。

Collection常用方法说明
方法签名说明
boolean add(E e)将元素 e 放入集合中
void clear()删除集合中的所有元素
boolean isEmpty()判断集合是否没有任何元素,俗称空集合
boolean remove(Object e)如果元素 e 出现在集合中,删除其中一个
int size()返回集合中的元素个数
Object[] toArray()返回一个装有所有集合中元素的数组
Set集合

Set集合不允许存储相同的元素,所以如果把两个相同元素添加到同一个Set集合,则添加操作失败,新元素不会被加入,add()方法返回false。

  • HashSet类
    HashSet是Set集合最常用实现类,是其经典实现。HashSet是按照hash算法来存储元素的,因此具有很好的存取和查找性能。
    HashSet具有如下特点:
    1.不能保证元素的顺序。
    2.HashSet不是线程同步的,如果多线程操作HashSet集合,则应通过代码来保证其同步。
    3.集合元素值可以是null
  • TreeSet类
    TreeSet时SortedSet接口的实现类,TreeSet可以保证元素处于排序状态,它采用红黑树的数据结构来存储集合元素。TreeSet支持两种排序方法:自然排序和定制排序,默认采用自然排序。
List集合

List集合代表一个有序、可重复集合,集合中每个元素都有其对应的顺序索引。List集合默认按照元素的添加顺序设置元素的索引,可以通过索引(类似数组的下标)来访问指定位置的集合元素。
实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。

  • ArrayList
    ArrayList是一个动态数组,也是我们最常用的集合,是List类的典型实现。它允许任何符合规则的元素插入甚至包括null。每一个ArrayList都有一个初始容量(10),该容量代表了数组的大小,增加元素,容器的大小也会随着增加。当快溢出时,就会进行扩容操作。每次扩容是原来的1.5倍。所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。
    ArrayList擅长于随机访问。同时ArrayList是非同步的。

  • LinkedList
    LinkedList是List接口的另一个实现,除了可以根据索引访问集合元素外,LinkedList还实现了Deque接口,可以当作双端队列来使用,也就是说,既可以当作“栈”使用,又可以当作队列使用
    LinkedList的实现机制与ArrayList的实现机制完全不同,ArrayLiat内部以数组的形式保存集合的元素,所以随机访问集合元素有较好的性能;LinkedList内部以链表的形式保存集合中的元素,所以随机访问集合中的元素性能较差,但在插入删除元素时有较好的性能。

  • Vector
    与ArrayList相似,但是Vector是同步的。所以说Vector是线程安全的动态数组。

  • Stack
    Stack继承自Vector,实现一个后进先出的堆栈。push方法插入元素和pop方法取出元素,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

Map常用方法说明

Map接口采用键值对Map<K,V>的存储方式,保存具有映射关系的数据,因此,Map集合里保存两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value可以是任意引用类型的数据。key值不允许重复,可以为null。如果添加key-value对时Map中已经有重复的key,则新添加的value会覆盖该key原来对应的value。常用实现类有HashMap、TreeMap等。

方法签名说明
V get(Object k)根据指定的 k 查找对应的 v
V getOrDefault(Object k, V defaultValue)根据指定的 k 查找对应的 v,没有找到用默认值代替
V put(K key, V value)将指定的 k-v 放入 Map
boolean containsKey(Object key)判断是否包含 key
boolean containsValue(Object value)判断是否包含 value
Set<Map.Entry<K, V>> entrySet()将所有键值对返回
boolean isEmpty()判断是否为空
int size()返回键值对的数量
HashMap与Hashtable
  • HashMap与Hashtable都继承Map接口,但HashMap的基类是AbstractMap,而的基类是ashtableDictionary
  • HashMap是线程不安全,HashTable是线程安全synchronized
  • HashMap可以使用null值最为key或value;Hashtable不允许使用null值作为key和value,如果把null放进HashTable中,将会发生空指针异常。
  • HashMap使用的是Iterator(迭代器),HashTable使用的是Iterator和Enumerator(枚举)
  • HashMap初始值16,每次扩容变为原来2倍,HashTable初始值11,每次扩容变为原来2倍加一
TreeMap实现类

TreeMap是SortedMap的实现类,是一个红黑树的数据结构,每个key-value对作为红黑树的一个节点。TreeMap存储key-value对时,需要根据key对节点进行排序。TreeMap也有两种排序方式:

  • 自然排序:TreeMap的所有key必须实现Comparable接口,而且所有的key应该是同一个类的对象,否则会抛出ClassCastException。
  • 定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值