Java集合框架
在介绍Java集合框架之前,我们首先来看下Java集合框架图。方便我们对Java集合框架有个大概的理解。

从框架图我们可以看出,Collection 和Map是顶级接口,其中Collection 下面有List 和Set两个接口,List下面两个常用的实现类是ArrayList 和LinkedList ,Set下面有两个常用的实现类是HashSet 和TreeSet。Map和Collection 在同一级,Map下两个常用的实现类是HashMap 和TreeMap。下面我们逐一进行说明。
一、List
特点:List是一个有序可重复的队列,有序指的是取出数据的时候顺序是按存储数据顺序一致的,(先进先出)。可以通过指定下标获取指定位置的元素。
常用实现类:ArrayList 和LikedList
1):ArrayList:底层实现是一个动态数组,ArrayList提供了三个构造方法,默认情况下生成一个ArrayList实例,生成一个长度为10的空数组,我们往ArrayList存放数据,每次存放的时候会检查一次长度是否足够,当长度不足时候,调用grow()方法进行扩容,将容量扩大至原来的1.5倍,然后将原来数组复制放到扩容后的数组中,添加新数据。
1.1):ArrayList是线程非同步的,擅长于随机访问。
2):LinkedList:底层实现是双向链表,不擅长于随机访问,所有的操作都需要按照双向链表的需要执行,LinkedList查询速度比较慢,插入删除速度比较块。同时它也是线程非同步的,如果要实现线程同步,必须在创建List时候构建一个同步的List 。通过使用工具类Collections可以实现。
List aList=Collections.synchronizedList(new LinkedList(...));
3):ArrayList 和LinkedList的区别:
1、ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2、对于get/set ArrayList优于LinkedList,因为ArrayList底层是一个动态数组,可以通过索引获取数据,查询速度块。
3、对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
二、Set
特点:Set是一种不包括重复的Collection ,即是Set存放的数据是无序不可重复的 。Set允许存放null元素,但是最多只能是一个,Set下面有两个常用的实现类,HashSet 和TreeSet。
1):HashSet:底层实现是哈希表,(HashMap),大致实现是通过一个HashMap实现元素的存储,所有的元素存放在HashMap的key值中,HashMap的value统一由一个Object充当,HasSet最多只能存放一个Null值。同样,它也是线程非安全的。如果在多线程环境中使用HashSet,而其中至少一个线程修改了HashSet,必须外部保持同步。HashSet是按Hash算法来储存元素,因此HashSet具有很好的存取和查找功能。
2):treeSet:虽然Set存放的是无序不可重复的元素,但是treeSet却是一个有序的集合,treeSet基于treeMap实现,是线程非安全的,treeSet可以保证元素处于排序状态(排序方式有两种:自然排序和定制排序,默认情况下是自然排序)。注意:treeSet不是通过hashCode和equals()来比较元素的,而是通过comparaeTo()对比两个元素是否相等。
三、Map
特点:map集合和List和Set接口不同,它是由一系列的键值对组成(key,value),一个key对应一个value,即是key和value一 一对应,map的key值不允许重复,value值允许重复。
1):HashMap:HashMap是map最常用的一个实现类,允许key值/value值为null,是以哈希表数据结构实现,根据hashCode的值存储数据,根据键可以直接获取到值,具有非常快的访问速度,遍历HashMap时候取出数据时随机的,HashMap是线程非安全的,在多线程环境下同一时刻可能有多条线程同时操作HashMap,造成数据不唯一,如果要在多线程环境下使用HashMap,可以使用Collections.synchronizedMap函数取得同步。
本文来自博客园,作者:羽~悠悠,转载请注明原文链接:https://www.cnblogs.com/Tom2-xiao-ye/p/9935480.html

浙公网安备 33010602011771号