Java集合框架1:概念篇

1.初识Java集合框架

1.集合的定义:可以把多个对象的引用放进一个类似于“容器”里。
2.集合的分类:

  • Collection:主要由List(有序可重复)、Set(无序不可重复)、Queue(队列实现)接口组成。
  • Map:代表具有映射关系的键值对集合。
  • java.util.Collection下的关系图:
    在这里插入图片描述
  • java.util.Map下的关系图:
    在这里插入图片描述
    3.将集合框架又可以分为以下几个部分:
    (1)数据结构:List、Queue、Deque(双端队列)、Set、Map
    (2)比较器:Comparator(比较器)、Compareable(排序接口)
    (3)算法:Collections(常用算法类)、Arrays(静态数组排序、查找算法)
    (4)迭代器:Iterator(通用迭代器)、ListIterator(针对List特化的迭代器)

2.List

List的主要实现类有:ArrayList、LinkedList、Vector、Stack

  • ArrayList:
    (1)动态数组结构、可以随机存取、尾部插入删除较方便、内部操作时效率很低(要挨个一定数组元素)。
    (2)当数组容量不足时自动扩容,效率较低。
  • LinkedList:
    (1)双向的链表结构,在任意位置插入删除都方便,但不支持随机取值(每次只能从一端开始遍历,直到找到要查询的对象)。
    (2)相比ArrayList来说不需要进行内存拷贝,效率较高,但因为有额外的前驱和后继节点,占用内存大一些。
  • Vector:
    (1)也是动态数组结构,相比ArrayList来说,它允许同步访问,是线程安全的,但是效率低下。
    (2)为啥线程安全:因为它里边的方法加了synchronized修饰,效率低。
    (3)如果又想用ArrayList又想线程安全呢?
    • 用List list =Collections.synchronizedList(new ArrayList());创建对象。
    • 也可以复制容器 java.util.concurrent.CopyOnWriteArrayList进行操作,例如:final CopyOnWriteArrayList cowList = new CopyOnWriteArrayList(Object);
  • Stack:
    (1)Stack是Vector的一个子类,采用先进后出的策略。
    (2)现在用的很少,大多被ArrayDeque(双端队列)替代使用。

3.Set

Set的特点:元素不重复、存取无序、无下标,他的主要实现类有:HashSet、LinkedHashSet、TreeSet。

  • HashSet(无序唯一): 底层基于hashMap的K实现,特性同HashMap
  • LinkedHashSet:底层基于LinkedHashMap的K实现,特性同LinkedHashMap
  • TreeSet(有序唯一):底层基于TreeMap的K实现,特性同Treemap,来自平衡的排序二叉树

4.Queue

Queue的主要实现类有:ArrayQueue、LinkedList、PriorityQueue

  • ArrayDueue:基于数组实现的双端队列,可以先进先出,也可以先进后出。想插入元素的时候它是头插,那需要它的push方法;如果需要尾插,需要他的offer方法。
  • LinkedList:是List接口的实现类,也是Deque的实现类,底层是一种双向链表的数据结构。
  • PriorityQueue:基于队列的一个实现类,他的元素排列并不是按照元素添加的顺序进行排列,而是内部会按照元素的大小进行排列,是一种能够自动排列的队列。

5.Map

Map是一个双列集合,其中保存的是键值对,键要求保持唯一性,值可以重复。它的主要实现类有:HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties。

  • HashMap: 继承自AbstractMap,Key不可重复,因为使用的是哈希表存储的元素,所以输入的数据和输出的数据的顺序基本不一致,HashMap最多只允许一条记录的Key为null,允许多条记录的值为null
  • LinkedHashMap:HashMap的子类, 内部使用链表的数据结构来记录插入的顺序,所以输入的顺序和输出的顺序是相同的,这也是它和HashMap的最大区别。
  • TreeMap:它能够把保存的记录根据键进行排序,默认是按键值的升序进行排序的,也可以指定排序的比较器。
  • IdentityHashMap:和他的名字一样,意为有着同一性的HashMap,与HashMap的不同之处在于,在获取元素的时候,通过==代替了equals()进行判断,比较的是内存的地址是否相同。
  • WeakHashMap:继承自AbstractMap,被称为缓存Map,向WeakHashMap中添加元素,再次通过键调用方法获取元素方法时,不一定获取到元素值,因为WeakHashMap 中的 Entry 可能随时被 GC 回收。
  • HashTable:
    (1)键和值均不能为空,且线程安全(因为方法上都加了synchronized同步锁)。
    (2)如果需要在多线程环境下使用HashMap,可以使用如下的同步器或使用并发工具包中的ConcurrentHashMap类。
    Map<String, Object> map =Collections.synchronizedMap(new HashMap<>());
  • Properties:继承自HashTable,新增了load()和store方法,可以直接导入或者将映射写入文件,另外,Properties的键和值都是String类型。
    在这里插入图片描述
    在这里插入图片描述

6.比较器

  • Comparable:
    (1)对实现它的每个类的对象进行整体的排序。
    (2)若一个类实现了Comparable接口,实现Comparable接口的类的对象的List列表(或者是数组)可以通过Collections.sort(或者是Arrays.sort)进行排序。
    (3)当实现Comparable接口的类的对象可以用作有序映射或者有序集合的元素,而不需要指定比较器。
  • Comparator:
    (1)也是对实现它的每个类的对象进行整体的排序。
    (2)用处:如果我们的这个类Person无法修改或者没有继承Comparable接口,我们又要对其进行排序,Comparator就有用了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值