List集合
ArrayList:底层是数组,数组是连续存储的,内存地址连续所有查询效率高,增删慢。
LinkendList:底层是链表结构,链表结构内存散乱,但是每个元素储存本身地址还会储存下一个元素的地址,所以增删快。查询慢
Voctor:底层是数组,线程安全,增删查慢。
Map集合
hashMap:是map集合的子类,允许键值为null,非线程安全、高效
hashTable:线程安全,低效,不允许键和值为null
linkendHashMap:是hashMap的一个子类,会记录数据插入信息
ScortMap:TreeMap保持的纪录会根据key来排列,默认是升序排列
Set集合
- HashSet:底层有hashMap实现,不允许集合中有重复的值,使用时重写equals和hashCode方法
- LinkedHashSet:继承HashSet,同时又基于LinkedHashMap来实现,底层使用的是LinkedHashMap
结构特点
- list集合是单列数据的集合,集合数据有序
- map集合是双列数据集合,其以key-value的形式,key值不允许重复,value可以重复
- set集合是单列数据的集合,集合数据有序,但是元素在集合中的位置取决于hashCode决定,所以位置是固定的,但是用户不能够控制位置,所以对于用户来说是无序的
数组和链表的区别
- 数组是将元素连续的储存在内存空间中,内存地址连续,查找数据效率很高,但是在储存之前要向申请一块连续的内存空间,并且在编译之前就要确定内存空间大小,在运行时的空间大小不能随着自己的需要而增加和减少而改变,当数据量大时会导致数组大小越界,数据比较小时,又浪费内存空间。
- 链表是动态的申请内存空间,对于数据的增加删除比较灵活,不需要像数组那样提前申请一块固定的内存空间。链表只需要在使用时申请就可以了,根据需要可以申请或删除内存空间,链表中的数据可以在任意位置,通过应用来关联数据。