Java集合框架

xiaoxiao2021-02-28  35

 

 

 

1.背景介绍

 

什么是集合?

在Java中,集合就是能乘装多个对象(实际上是引用)的容器

什么是集合框架?

集合框架是不同数据结构的容器类在不断向上抽取的过程中所构成的一套容器体系,这些容器满足了在不同需求下数据存储的不同特性,比如有序性、唯一性等,不同容器在不同需求下表现出的性能也是有巨大差别的,了解了集合框架之后,能让我们有一个清晰的概念,知道在什么场景中,用哪一种容器可以达到比较好的性能(至少能不明显拖慢接口速度)

数组也能装多个元素,为什么还要使用集合框架?

由于数组长度和类型是固定的,所以光使用数组已经很难满足实际开发需求了,我们存储多个数据的容器往往是容积可变的,有时候存储的对象类型也会不同

2.知识剖析

我们如何来使用集合框架呢?

1、基本层次:看顶层、调底层

2、一般层次:熟悉常用底层实现类的特点,根据需求使用特定实现

3、进阶层次:知道底层如何实现,可以根据需求利用现有框架资源自定义容器,使容器性能在该项目下得到最大优化

Java集合框架中常用的集合类有哪些?

1.List接口下:ArrayList,LinkedList

2.Set接口下:HashSet、TreeSet

3、Map接口下:HashMap、TreeMap

集合框架顶层(根)接口:Collection

collection是集合框架的顶层接口,集成了一些集合的共性方法;添加、删除、修改、查询、判断等

1.添加:boolean add(Object obj):添加元素;booleanaddAll(Collectioncoll):添加给定集合到当前集合

2.删除:boolean remove(object obj):删除元素;void clear();清空集合

3.判断:boolean contains(object obj):是否包含指定元素;booleanisEmpty():判断集合中是否有元素。

4.获取:int size():获取元素个数;Iterator iterator():取出元素的方式:迭代器。

5.其他:Object[] toArray():将集合转成数组。

根接口下的子接口及实现类

List(列表)接口:有序,元素都有索引(角标),元素可以重复

1、ArrayList:基于数组实现(长度可变),不同步,针对性查改的速度快

2、Vector:和ArrayList基本相同,但是是同步的,现已被弃用

3、LinkedList:基于双向链表实现,不同步,随机增删的速度很快

Set(罐子)接口,无序(存取顺序没有确切关联),元素不可重复

1、HashSet:基于哈希表实现,不同步

2、TreeSet:基于二叉树实现,不同步,自然排序,定制排序

Map(成对元素)接口,key唯一,value随意

1、HashMap:哈希表结构;Key唯一;不同步;允许null作为键,值。hashCode()、equals()确定唯一

2、TreeMap:二叉树结构;Key唯一;可排序;不同步但高效;允许null作为键,null作为值。

3.常见问题

1、每个容器实现类的数据结构都有区别,为什么他们都能调用iterator()方法拿到属于自己的迭代器对象?

2、ArrayList增删一定慢吗?

3、Set集合如何保证对象的唯一性?

4、开发中通常都有这样一个共识,使用到Map集合的时候,如果没有对元素进行排序的需求,那么一律使用HashMap。这是为什么呢?

4.解决方案

1、因为Collection接口下所有实现类的内部类都实现了Iterator接口,并返回实现后的迭代器对象

2、不一定,从数据结构上看,增删的地方越接近数组末端,增删的速度将会越快

3、在加入元素时,先用hash算法算出元素的hashCode,如果hashCode值不同,再调用元素的equals方法比较容器中是否有相同元素,如果返回false,则表明没有重复元素,将该元素的hashCode存入哈希表(数组结构)对应位置中,如果返回true,就不会存入该元素;如果出现hashCode值相同,将不会比较equals方法,直接存入,此时若比较equals方法返回false的情况,会发生hash冲突,集合的性能会降低,所以hashCode方法和equals都需要重写,使他们返回的结果相同,可以有效的避免hash冲突的情况

4、使用hash表可以在知道key的情况下快速定位到对象的具体位置,查询的效率比使用索引下标的数组更高。

5.编码实战

6.扩展思考

7.参考文献

https://blog.csdn.net/qiuych3/article/details/51334753

8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!

转载请注明原文地址: https://www.6miu.com/read-2650028.html

最新回复(0)