《Java集合汇》
集合在我们项目开发过程中用的到很多地方,今天我就把我个人所理解的集合跟大家分享一下。
一,Iterable,Collection,List,Set,Queue的关系:
1,List,Set,Queue都继承着java.util.Collection接口,而Collection继承的Iterable接口,这两种接口都会提供一个remove方法,他们的区别主要有两个方面:1,性能方面:Collection采用的是单链表结构查询,单链表结构查询效率比较低,需要去一个一个的去遍历才能找到对象,如果结合Iterator的remove方法结合next()方法使用比如集合中每隔一项删除一项Iterator的remove()效率更高。2,容错方面:在Iterator遍历时使用Collection的remove会报错,因为集合中对象的 个数会改变而Iterator内部对象个数不会变,反之不会报错。
二,Array与ArrayList的区别如下:
1,arraylist是array的复杂版本。
2,存取的数据类型:array只能存储相同数据类型的数据,而arraylist可以存储不同数据类型的数据。
3,长度的可变:array的长度是固定的,而arraylist的长度是可变的。
三,HashSet,TreeSet,LinkedHashSet的使用场合如下:
1,需要速度快的集合,使用HashSet
2,需要集合有排序的,使用TreeSet
3,需要按照插入的顺序存储集合,使用LinkedHashSet
四,HashMap,TreeMap,LinkedHashMap使用场合如下:
1,在Map中插入,删除和定位元素HashMap是最好的选择
2,需要集合有排序,使用TreeMap更好
3,需要按照插入的顺序存储集合,使用LinkedHashMap
五,HashMap和HashSet的区别
六,HashMap的实现原理:
通过put和get存储和获取对象,存储对象时,我们将K/V传给put方法时,它调用hashcode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量。获取对象时,我们将K传递给get,他调用hashcode计算hash从而得到bucket位置,并进一步调用equals()方法确认键值对。
七,List,Set,Map之间的区别
List和Set都继承Collection,但是Map不是Collection的子接口。
八,Queue接口
如图所示:
注:下面是一张思维导图认识一下集合的框架构成,方便理解和记忆,以便加深印象