java基础的三大集合体系,Java集合基础

Java集合篇

一、集合整体概览图

b70273fa0e4b2630fbace443cce584cb.png

二、概念

1、什么是集合?

Java集合是一个用来存放对象(就是存放数据的容器)的容器,存储对象信息。所有集合类都位于【java.util】包下,但支持多线程的集合类位于【java.util.concurrent】包下。

应当注意:

集合只能存放对象(实际上是对象名,即指向地址的指针)。基本数据类型的数据放入集合中会自动装箱,转换成对应的包装类类型存入集合。

集合存放的是多个的对象引用(指向对象的引用),对象本身是放在堆内存。

集合存放不同类型、不限数量的数据类型。

2、集合的组成

2.1、接口概览

Collection接口层级:

b5ec8e55aa3304c65ea339664c91a492.png

Map接口层级:

238d9e91ac85b036dbc5b58ec80bcf44.png

Java集合主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系,(注意:Map不是Collection的子接口)。

Collection存放单一元素。

Map存放键值对。

总结:

两个根接口---->Collection和Map

四个子接口---->List、Set、Queue、Map

2.2、实现类概览

Collection接口的实现类:

bb0523bf54b723471905f816805fe639.png

Map接口的实现类:

e5e8aa7f644a9aba3b86f91663fe7477.png

三、Java集合常见接口及实现类

1、Collection接口常见方法(来源于Java API)

d20aca9f28fc6062fe37533b60dd2e08.png

总结:

操作集合可以归结为CRUD。

Collection中常用API在接口里已经定义好,子接口和实现类必须继承。

2、Collection的三个子接口

1、List

特点:有序、可重复

ArrayList:(动态)数组实现

​ 数组和链表的区别:

数组随机访问性强、查找速度快

链表插入删除速度快

数组大小固定,不能动态扩展

链表大小不定,扩展灵活 Vector:(动态)数组实现,但是添加了很多的synchronized

Vector和ArrayList的区别:

扩容规则:ArrayList扩容1.5倍;Vector默认2倍,没有定义倍数。

线程安全:Vector线程安全,所以效率低;ArrayList不是线程安全的。

2、Set

特点:无序、不重复

数值放在map的key上,value放了个PRESENT,是一个静态的Object,相当于place holder,每个key指向这个Object。

实现类:HashSet、TreeSet、LinkedHashSet

HashSet:HashMap实现。用HashMap的key来储存元素。

集合元素值可以是null。

不能保证元素的顺序。

HashSet不是线程同步的。

LinkedHashSet:HashSet+LinkedList

使用链表维护元素的次序,元素的顺序与添加顺序一致。

TreeSet:红黑树结构。

可以有序,使用自然排序或者自定义比较器(实现Comparator接口)来排序。

保证元素处于排序状态

默认采用自然排序(实现Comparable接口)。

Java常用类中已经实现了Comparable接口的类有以下几个:

​ ♦ BigDecimal、BigDecimal以及所有数值型对应的包装类:按照它们对应的数值大小进行比较。

♦ Charchter:按照字符的unicode值进行比较。

♦ Boolean:true对应的包装类实例大于false对应的包装类实例。

♦ String:按照字符串中的字符的unicode值进行比较。

♦ Date、Time:后面的时间、日期比前面的时间、日期大。

3、Queue

是一端进另一端出的线性数据结构;DeQue是两端都可以进出的。

子接口:DeQue

实现类:LinkedList、ArrayDeque、PriorityQueue

API:有两组API,基本功能一样。

3、Map

Map接口采用键值对Map的存储方式。常用实现类有HashMap、LinkedHashMap、TreeMap等。

key值不允许重复,可以为null。

常见API:

121fe378fcf23660c2afd10e07510af2.png

1、HashMap

HashMap基于hashing原理,通过put()和get()方法存储和获取对象。

解释:

为了成功的在HashMap和Hashtable中存储和获取对象,用作key的对象必须实现hashCode()方法和equals()方法。

当我们将键值对传递给put()方法时,它调用建对象的hashCode()方法来计算hashCode值,然后找到bucket位置来储存值对象。当获取对象时,通过建对象的equals()方法找到正确的键值对,然后返回对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会存储在链表的下一个节点中。

HashMap与Hashtable:

♦ HashMap是线程不安全,HashTable是线程安全的。

♦ HashMap可以使用null值作为key或value;Hashtable不允许使用null值作为key和value,如果把null放进HashTable中,将会发生空指针异常。

2、LinkedHashMap

使用双向链表来维护key-value对的次序。

3、TreeMap

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

两种排序方式:

♦ 自然排序:TreeMap的所有key必须实现Comparable接口,而且所有的key应该是同一个类的对象,否则会抛出ClassCastException。

♦ 定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序。

各Map实现类的性能分析

♦ HashMap通常比Hashtable(古老的线程安全的集合)要快

♦ TreeMap通常比HashMap、Hashtable要慢,因为TreeMap底层采用红黑树来管理key-value。

♦ LinkedHashMap比HashMap慢一点,因为它需要维护链表来爆出key-value的插入顺序。

ey进行排序。

各Map实现类的性能分析

♦ HashMap通常比Hashtable(古老的线程安全的集合)要快

♦ TreeMap通常比HashMap、Hashtable要慢,因为TreeMap底层采用红黑树来管理key-value。

♦ LinkedHashMap比HashMap慢一点,因为它需要维护链表来爆出key-value的插入顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值