Java集合类总体概况

一、集合与数组

数组(可以存储基本数据类型)是用来存对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。
集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。

二、层次关系

Java集合框架图   如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口


简化图



Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。
Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。

三、几种重要的接口和类简介

1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所以插入删除数据速度慢。

2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应值。

、常用集合的底层数据结构和线程安全性

1.list(有序,可重复)

ArrayList
   底层数据结构是数组,查询快,增删慢 , 线程不安全,效率高

 Vector
   底层数据结构是数组,查询快,增删慢,线程安全,效率低

 LinkedList
 底层数据结构是链表,查询慢,增删快,线程不安全,效率高

2、Set(无序、不能重复)

HashSet
    底层数据结构是哈希表。   哈希表依赖两个方法:hashCode()和equals()
  执行顺序:
   首先判断hashCode()值是否相同  是:继续执行equals(),看其返回值   是true:说明元素重复,不添加 是false:就直接添加到集合  否:就直接添加到集合
  最终:   自动生成hashCode()和equals()即可                

 LinkedHashSet
  底层数据结构由链表和哈希表组成。   由链表保证元素有序。 由哈希表保证元素唯一。

 TreeSet
 底层数据结构是红黑树。(是一种自平衡的二叉树)

 如何保证元素唯一性呢? 根据比较的返回值是否是0来决定

 如何保证元素的排序呢?两种方式  自然排序(元素具备比较性)  让元素所属的类实现Comparable接口 ;比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象

3、Map(双列集合)
 A:Map集合的数据结构仅仅针对键有效,与值无关。  B:存储的是键值对形式的元素,键唯一,值可重复。

 HashMap
   底层数据结构是哈希表。线程不安全,效率高, 哈希表依赖两个方法:hashCode()和equals()
   执行顺序:  首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值  是true:说明元素重复,不添加   是false:就直接添加到集合 ; 否:就直接添加到集合
 最终: 自动生成hashCode()和equals()即可

 LinkedHashMap
底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素唯一。

Hashtable
  底层数据结构是哈希表。线程安全,效率低  哈希表依赖两个方法:hashCode()和equals()
   执行顺序: 首先判断hashCode()值是否相同  是:继续执行equals(),看其返回值  是true:说明元素重复,不添加;  是false:就直接添加到集合  否:就直接添加到集合
最终: 自动生成hashCode()和equals()即可

 TreeMap
  底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素唯一性呢? 根据比较的返回值是否是0来决定, 如何保证元素的排序呢?  两种方式
  自然排序(元素具备比较性)   让元素所属的类实现Comparable接口;  比较器排序(集合具备比较性)  让集合接收一个Comparator的实现类对象

五、集合选取

是否是键值对象形式: 

是:Map
   键是否需要排序:  是:TreeMap   否:HashMap   不知道,就使用HashMap。

否:Collection
   元素是否唯一:是:Set 元素 ,是否需要排序: 是:TreeSet  否:HashSet  不知道,就使用HashSet; 

                          否:List   要安全吗: 是:Vector   否:ArrayList或者LinkedList    增删多:LinkedList   查询多:ArrayList  不知道,就使用ArrayList

  不知道,就使用ArrayList


猜你喜欢

转载自blog.csdn.net/wanghengwhwh/article/details/70143394