Java----集合梳理

22 篇文章 2 订阅

集合是Java中一个很重要的组成部分。
先来看一张集合的图:
这里写图片描述

一张图基本上集合的框架结构就清楚了。
后面,再针对这张图上面的结构一一分析:

1.常用的集合梳理

了解集合,最容易的办法就是了解Collection(注意区分Collections,collections是一个工具类)
Collection的接口
这里写图片描述

Collection的实现子类
这里写图片描述
这里写图片描述
这里写图片描述

2.常用的集合解释

虽然集合有很多很多,但是,我们在编程中并不是全部用上,大多数都是只有特殊时候才会用上。
下面列举一些常用的集合,进行分析:

名称特点
map键值对,key不可重复
list有序,可重复,以元素安插顺序来放置元素,不会重新排列
set无序,不可重复,使用内部排列机制
queue先进先出

List系列

名称特点
ArrayList优先随机访问,数组实现,适合查询
LinkedList适用于频繁的添加删除元素
VectorAbstractList的实现类,同步,线程更加安全
Steak模拟栈的结构,先进后出

Set系列

名称特点
HashSet常用于存储重复自由的集合,需要采用适当分配哈希码的方式来实现hashCode()方法(需重写hashcode和equals())
LinkedHashSet扩展了HashSet,当需要跟踪插入的元素数据时,其迭代器按照元素的插入顺序来访问各个元素,提供了一个可访问各个元素的有序集合
TreeSet常用于有序方式插入和抽取元素,故元素应该是可排序的元素
SortSet保持元素的有序序列,必须实现Comparable

Map系列

名称特点
HashMap遍历速度慢,插入删除速度快,随机访问速度快,适合海量数据,o(1)的随机访问速度,不是可遍历
Hashtable里面的方法几乎都是同步的,线程安全。Hashtable不允许存放null值(键和值都不可以),而HashMap可以
LinkedHashMapLinkedHashMap 实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序,该集合不是线程安全
TreeMap使用了二叉权的数据结构,key是有序,保存其唯一性用到了hashCode()、equals()以及比较器(唯一性判断,键排序同TreeSet)

相对于集合的各种的方法,可以查看API,这个没什么好说的。

3.集合的一些小问题

3.1 ArrayList、Vector、LinkedList的区别

分类ArrayListVectorLinkedList
方式数数组方式存储数据,允许直接按序号索引元素数组方式存储数据,允许直接按序号索引元素双向链表实现存储
特点索引数据快而插入数据慢索引数据快而插入数据慢索引慢,插入速度较快
安全非线程安全synchronized修饰,线程安全非线程安全

3.2 Iterator接口的作用

collection实现了Iterator接口,而集合是collection的实现,所以集合实现了Iterator接口。

Iterator接口有hasNext(),next(),remove()三个方法,所以Iterator接口方法能以迭代方式逐个访问集合的各个元素,并且安全的从collection中去除适当的元素。

注意:
在Iterator进行删除操作会对底层的Collection带来影响,迭代器是快速修复,所以,当迭代器对数据进行迭代的时候有其他的线程修改底层集合,Iterator会抛出ConcurentModificationException,并且立即失败。

3.3 Comparable接口和Comparable接口

这两个接口是比较接口,对于String等内建类实现Comparable以提供一种排序方式,对于其余类,可实现Comparator来定义自己的比较方式。

分类ComparableComparable
适用于有自然排序不可自然排序或者不喜欢Comparable默认排序方式
使用实现comparaTo()自定义比较器

4.总结

集合就先说在这里,以后有新的会持续更新。

参考:
https://www.jianshu.com/p/ff69ec0fa1a5
Java API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值