Java集合的继承关系图解

集合的继承关系图解

集合的特点:

用来存储不同类型的对象(基本数据类型除外),存储长度可变。
Java集合中实际存放的只是对象的引用,每个集合元素都是一个引用变量,实际内容都放在堆内存或者方法区里面,但是基本数据类型是在栈内存上分配空间的,栈上的数据随时就会被收回的。

基本类型数据如何解决呢?

可以通过包装类把基本类型转为对象类型,存放引用就可以解决这个问题。更方便的,由于有了自动拆箱和装箱功能,基本数据类型和其对应对象(包装类)之间的转换变得很方便,想把基本数据类型存入集合中,直接存就可以了,系统会自动将其装箱成封装类,然后加入到集合当中。

  • byte ~> Byte
  • short ~> Short
  • boolean ~> Boolean
  • char ~> Char
  • int ~> Integer
  • long ~> Long
  • float ~> Float
  • double ~> Double
集合框架图:

整体框架图在这里插入图片描述在这里插入图片描述

Java集合框架图

说明:上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。

简化图:

Java框架集合简略图
在这里插入图片描述
1.Iteraor接口
(迭代器接口)用于遍历集合中元素的接口,主要包含三种方法:

boolean hasNext()
E next()
void remove()

它的一个子接口ListIterator在它的基础上又添加了三种方法:

add()
previous()
hasPrevious()

也就是说如果是实现Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;
而在方法中实现了LinkedIterator接口的集合,可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如List。

Iterator和Iterable的区别:
1). Iterator是迭代器接口,而Iterable是为了只要实现该接口就可以使用foreach,进行迭代.

2). Iterable中封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器了。

3). 集合Collection、List、Set都是Iterable的实现类,所以他们及其他们的子类都可以使用foreach进行迭代。

4). Iterator中和核心的方法next(),hasnext(),remove(),都是依赖当前位置,如果这些集合直接实现Iterator,则必须包括当前迭代位置的指针。当集合在方法间进行传递的时候,由于当前位置不可知,所以next()之后的值,也不可知。而当实现Iterable则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。

2.Collection (集合的最大接口)继承关系
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java
SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
(1)List:可以存放重复的内容
(2)Set:不能存放重复的内容,所以的重复内容靠hashCode()和equals()两个方法区分
(3)Queue:队列接口
(4)SortedSet  可以对集合中的数据进行排序
Collection定义了集合框架的共性功能。

1542422544583

(1)实现List的子类的特点:
——ArrayList   底层数组实现,线程不安全,查询速度快
——Vector  线程安全,但速度慢,已被ArrayList替代
——LinkedList  底层链表实现,链表结果,增删速度快,没有同步方法
——Stack(已经不用,可由LinkedList代替)

(2)实现Set接口子类的特点:
——HashSet:底层数据结构又hashmap的键来实现。不保证集合中元素的顺序,即不能保证迭代的顺序与插入的顺序一致。是线程不安全的。
——TreeSet:有序的存放,线程不安全,可以对Set集合中的元素进行排序,由红黑树来实现排序,TreeSet实际上也是SortedSet接口的子类,其在方法中实现了SortedSet的所有方法,并使用comparator()方法进行排序。
——LinkedHashSet:底层由链表实现,按照元素插入的顺序进行迭代,即迭代输出的顺序与插入的顺序保持一致

3.Map接口

Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
注意:由于Map中作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。

Map接口的常用子类
  ——HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
  ——TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

4.集合工具类

Collections:集合框架的工具类。里面定义的都是静态方法。

Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义 了单列集合的共性方法。
  它有两个常用的子接口,
      ——List:对元素都有定义索引。有序的。可以重复元素。
      ——Set:不可以重复元素。无序。

Collections是集合框架中的一个工具类。该类中的方法都是静态的。
    提供的方法中有可以对list集合进行排序,二分查找等方法。
    通常常用的集合都是线程不安全的。因为要提高效率。
    如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

5.比较

是否有序是否允许元素重复
Collection
List
SetAbstractSet
HashSet
TreeSet是(用二叉排序树)
MapAbstractMap使用key-value来映射和存储数据,key必须唯一,value可以重复
HashMap
TreeMap是(用二叉排序树)
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值