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函数取得同步。

 

posted @ 2018-11-09 15:40  羽~悠悠  阅读(240)  评论(0)    收藏  举报
返回顶端