集合框架总结

集合

集合就是放数据的载体,放的对象的引用,而不是对象本身

集合分类

1. Collection

Collection 是一个集合类的上级接口。它提供了对集合对象进行基本操作的通用接口方法。继承与他的接口主要有Set 、List与Queue。

Collections 是一个针对集合类的一个帮助类。它包含有sort(),copy(),shuffle(),binarySearch()等关于集合的静态方法。此类不能实例化,服务于Java的Collection框架。

  • List(有序)
  1. ArrayList
    ArrayList的底层实现为数组,是顺序结构。
    它可以存放null值,线程不同步,因此效率高。
    可通过数组下标的形式进行查找,所以在查询方面的效率较为出色,它的插入,在头部插入速度慢,在尾部插入速度快。
  2. LinkedList
    LinkedList的底层实现为双向链表形式,是链式结构。
    它可以存放null值,也为线程不同步,因此效率高。
    因为是链表,所以插入速度快,但插入之前还是要查找的,所以它两端插入快,中间插入慢,在数据量大的情况下,性能优于ArrayList。
  3. Vector
    Vector与ArrayList的差别是,Vector是线程同步的。

vector有一个子类Stack(C)
底层数据结构是基于链表的,是后进先出的堆栈。
特有的方法有pop(),posh(),peek()。

  • Set(唯一)
  1. HashSet
    底层数据结构:哈希表
    内存存储位置:hashCode()决定,由equals()判断是否重复,HashSet底层实现是HashMap,并且把数据作为HashMap中的key值。因此不能有重复值。
  2. TreeSet (有序,唯一) ——> 实现了SortedSet接口
    底层数据结构:红黑树
    TreeSet主要用于排序。

TreeSet如何排序
通过Comparable和Comparator接口
Comparable自然排序,重写compareTo()方法
Comparator比较器排序,重写compare()方法
当Comparable比较方式和Comparator比较方式同时存在时,以Comparator的比较方式为主

  • Queue(先进先出)

Queue集合是队列(线性结构),进出顺序是先进先出

实现类有Deque(I)
Deque是栈(双端队列),LinkedList除了是List的实现类之外还是Deque的实现类

2. Map

Map的底层数据结构是哈希表。
它以key-value的形式存入数据,其中key不允许有重复值,value允许有重复值。
它有两种遍历方式:

  1. 遍历键:keySet()
  2. 遍历键值对:entrySet()
  • HashMap
    底层数据结构:哈希表
    底层实现:hash值配合使用的数组和链表
    HashMap线程不安全,效率高
    无序,key和value都允许有null值,但是key只允许有一个
    .如何保证键的唯一性:通过hashCode和equals方法判断

  • TreeMap(主要作用:排序)
    底层数据结构:红黑树
    它是有序的,根据key排序
    初始容量:16,加载因子:0.75 ->扩展为原容量的2倍->使用resize()方法扩容

    子类 LinkedHashMap
    底层数据结构:链表+哈希表
    有序,按插入顺序排序
    key和value 都允许有null值

  • HashTable
    底层数据结构:哈希表
    无序,key和value都不允许有null值
    线程安全,效率低

  • ConcurrentHashMap
    底层数据结构:Segment数组 + HashEntry数组
    无序,key和value都不允许有null值
    线程安全,效率低

比较

HashMap和HashTable的区别
1.Hashtable继承自Dictionary类,HashMap是Map接口的实现
2.Hashtable是线程安全,HashMap线程不安全
3.hashTable的key和value都不能为null,HashMap允许存在一个null的key,多个null的value。
4.HashMap适合单线程环境,HashTable适合多线程环境

ConcurrentHashMap和hashtable的区别
1.ConcurrentHashMap是结合了HashMap和HashTable两者的优势。HashMap没有考虑到同步问题,而Hashtable考虑了同步问题
2.HashTable在每次执行时都要锁住整个结构。而ConcurrentHashMap只需要锁部分即可

HashMap和TreeMap的区别
1.对于Map中插入,删除,定位的操作 - >选择HashMap
2.如果是要对一个有序集合进行遍历 ->选择TreeMap

集合遍历

1. for循环遍历

2.Iterator迭代器遍历

父接口:Iterable
方法:

  1. hashNext()
  2. next()
  3. remove()

3.foreach遍历

父接口:Iterable

遍历比较

foreach和Iterator的区别
迭代器:可迭代,可删除
而foreach不可以删除
for循环和Iterator对比

  1. ArrayList - 随机访问比较快,而for循环中的get()方法可直接获取。
  2. LinkedList - 添加/删除比较快,而iterator中的next(),方法可直接获取。
  3. 从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素.而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的.可以访问没有顺序的集合.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值