【精华】Java基础知识——集合框架

一、Java Collection框架

  Collection框架包含大量集合接口以及这些接口的实现类和操作它们的算法,主要提供了List、Queue、Set、Stack、Map等数据结构。其中List、Queue、Set、Stack都集成自Collection接口。
在这里插入图片描述
  Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

  集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

  • 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
  • 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
  • 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

  除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。

二、集合接口

在这里插入图片描述

三、集合类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、常用集合间的区别

1.Set、List和Map

  1. Set的特点是集合中的元素不能重复,该接口有两个实现类:HashSet、TreeSet。其中TreeSet实现了SortedSet接口,因此其中的元素是有序的。
  2. List又称有序的Collection,它按对象进入的顺序保存重复的对象。其实现类有:LinkedList、ArrayList、Vector
  3. Map提供了一个从键映射到值的数据结构。它用来保存键值对,其值可重复但键是唯一的,不能重复,其实现类有:HashMap、TreeMapLinkedHashMap、WeakHashMap、IdentityHashMap。HashMap是基于散列表实现的,采用对象的HashCode可以快速查询。LinkedHashMap采用列表的来维护内部的顺序。TreeMap基于红黑树来实现,内部元素是按序排列的。

2.ArrayList、Vector、LinkedList

  同: 三者均在java.util包中,均为可伸缩数组,即可动态改变长度的数组。
  异:

  • ArrayList和Vector都基于存储元素的Object[] array来实现,它们会在内存中开辟一块连续的空间来存储。都支持用下标访问元素,索引数据较快。ArrayList和Vector都有一个初始化的容量大小,当里面存储的元素超过这个大小时就需动态扩充它们的存储空间。Vector默认扩充为原来的2倍,ArrayList默认扩充为原来的1.5倍Vector是线程安全的,ArrayList不是线程安全的
  • LinkedList采用双向列表来实现,对数据的索引需要从列表头开始遍历,故用于随机访问的效率较低。LinkedList不是线程安全的。
  • 当对数据的主要操作为索引或只在集合的末端增加、删除元素,使用ArrayList或Vector效率比较高;当对数据的操作主要为指定位置的插入或删除操作时,使用LinkedList效率较高;当在多线程中使用容器时,选用Vector较为安全。

3.HashMap、HashTable、WeakHashMap

  • HashMap是HashTable的轻量级实现(非线程安全),HashMap允许空键值最多一次,而HashTable不允许
  • HashMap把HashTable的contains方法去掉了,改成了containsvalue和containskey。
  • HashTable的方法是线程安全的,而HashMap不是。但HashMap的效率高于HashTable。
  • HashMap使用Iterator,HashTable使用Enumeration。
  • HashTable中Hash数组默认大小是11,增加的方式是old x 2 + 1。HashMap中,hash数组默认是16,而且一定是2的指数
  • hash值的使用不同,HashTable直接使用对象的hashCode。

  TreeMap都是实现了SortMap接口的,能够把它保存的记录根据键排序。
  LinkedHashMap是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排序。
  WeakHashMap与HashMap类似,但key采用的是“弱引用”方式,只要WeakHashMap中的key不再被外部引用,它就可以被GC回收。而HashMap中key采用的是“强引用”的方法,当HashMap中的key没有被外部引用时,只有在key从HashMap中删除后才可被GC回收。
  HashMap的同步可以通过Map m = Collections.synchronizedMap(new HashMap())来实现。

4.Collection和Collections

  Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法。实现它接口的类主要有List和Set,该接口的设计目标是为了各种具体的集合提供最大化的统一操作方式。
  Collections是针对集合类的一个包装类,它提供了一系列静态方法以实现各种集合的搜索、排序、线程安全化等操作,其中大多数方法都是用来处理线性表。Collections类不能实例化,如同一个工具类,服务于Collection框架。

发布了123 篇原创文章 · 获赞 119 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/cbwem/article/details/103171467