面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。

集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

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

1、Iterator接口

Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。也就是说如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。

抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作流昂大大降低。

2、Collection (集合的最大接口)继承关系

——List 可以存放重复的内容

——Set  不能存放重复的内容,所以的重复内容靠hashCode()和equals()两个方法区分

——Queue  队列接口

——SortedSet  可以对集合中的数据进行排序

Collection定义了集合框架的共性功能。

add方法的参数类型是Object。以便于接收任意类型对象。

集合中存储的都是对象的引用(地址)。

3、List的常用子类
  特有方法。凡是可以操作角标的方法都是该体系特有的方法。

——ArrayList   线程不安全,查询速度快

——Vector  线程安全,但速度慢,已被ArrayList替代

——LinkedList  链表结果,增删速度快

4、Set接口

Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
  ——HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
    HashSet是如何保证元素唯一性的呢?
    是通过元素的两个方法,hashCode和equals来完成。
    如果元素的HashCode值相同,才会判断equals是否为true。
    如果元素的hashcode值不同,不会调用equals。

注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。

——TreeSet:

有序的存放:TreeSet  线程不安全,可以对Set集合中的元素进行排序

通过compareTo或者compare方法来保证元素的唯一性,元素以二叉树的形式存放。

5、Object类

在实际开发中经常会碰到区分同一对象的问题,一个完整的类最好覆写Object类的hashCode()、equals()、toString()三个方法。

6、集合的输出

——4种常见的输出方式

——Iterator: 迭代输出,使用最多的输出方式

——ListIterator: Iterator的子接口,专门用于输出List中的内容

——Enumeration

——foreach

在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。

7、Map接口

Correction、Set、List接口都属于单值的操作,而Map中的每个元素都使用key——>value的形式存储在集合中。

Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。

8、Map接口的常用子类

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

9、集合工具类

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

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

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

10.比较

   是否有序 是否允许元素重复
Collection
List
Set AbstractSet
HashSet
TreeSet 是(用二叉排序树)
Map AbstractMap 使用key-value来映射和存储数据,key必须唯一,value可以重复
HashMap
TreeMap 是(用二叉排序树)

11.总结:

List:add/remove/get/set。

1,ArrayList:其实就是数组,容量一大,频繁增删就是噩梦,适合随机查找;

2,LinkedList:增加了push/[pop|remove|pull],其实都是removeFirst;

3,Vector:历史遗留产物,同步版的ArrayList,代码和ArrayList太像;

4,Stack:继承自Vector。Java里其实没有纯粹的Stack,可以自己实现,用组合的方式,封装一下LinkedList即可;

5,Queue:本来是单独的一类,不过在SUN的JDK里就是用LinkedList来提供这个功能的,主要方法是offer/pull/peek,因此归到这里呢。

Set:add/remove。可以用迭代器或者转换成list。

1,HashSet:内部采用HashMap实现的;

2,LinkedHashSet:采用LinkedHashMap实现;

3,TreeSet:TreeMap。

Map:put/get/remove。

1,HashMap/HashTable:散列表,和ArrayList一样采用数组实现,超过初始容量会对性能有损耗;

2,LinkedHashMap:继承自HashMap,但通过重写嵌套类HashMap.Entry实现了链表结构,同样有容量的问题;

3,Properties:是继承的HashTable。

顺便说一下Arrays.asList,这个方法的实现依赖一个嵌套类,这个嵌套类也叫ArrayList!

Java集合继承关系图相关推荐

  1. java集合类继承关系图_java集合继承关系图

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...

  2. Java 10 常用集合继承关系图

    概述 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用. 类图如下: 1.Iterable与Iterator接口之间的区别 我看到好多网上的文章类图 ...

  3. Java集合(一)Java集合及其关系

    本文目录 1 Java集合接口继承关系和实现 1.1 Java集合包 1.2 Java集合接口关系 1.3 Java集合框架类关系及特性 2 Java集合接口/类简述 2.1 Collection,i ...

  4. Java反射-继承关系

    目录 反射类型继承关系图 类 Type ParameterizedType TypeVariable WildcardType GenericArrayType Annotation Annotate ...

  5. C++版数据结构继承关系图

    文章目录 1 C++版数据结构继承关系图 1 C++版数据结构继承关系图 http://www.plantuml.com/plantuml/png/RP0nJaCn38Ptd-AfUs_0K4JPAW ...

  6. android 中组件继承关系图,一目了然

    View继承关系图 Adapter适配器继承关系图 Activity继承关系图

  7. JS面向对象——Object对象的方法补充、原型继承关系图

    一.Object.create() 这个方法用于创建一个新对象.被创建的对象的__proto__指向create函数第一个参数的原型对象prototype,在创建新对象时可以通过create函数第二个 ...

  8. 使用IDEA工具查看Java类层次结构关系图

    本文图文讲解开发中IDEA常用查看Java类层次结构关系图方法. 首先需要强调的是idea工具版本以及操作系统平台不同,界面.功能.快捷键等会有所不同,但总体是一致的,我这里是在macOS Big S ...

  9. java中parent结构_详解java中继承关系类加载顺序问题

    详解java中继承关系类加载顺序问题 实例代码: /** * Created by fei on 2017/5/31. */ public class SonClass extends ParentC ...

  10. Qt4.8类继承关系图(全网最全)

    一.概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助,而网上流传的多是较老版本的,并且是jpg格式,不便于学习使用,所以我就花了一些时间整理了这一套Qt类继承图 (包含Qt4 ...

最新文章

  1. Web Components 简述
  2. selenium操作浏览器的前进和后退
  3. 基础、语法都不是最重要的,学Python最重要的是什么?编程思路!
  4. Boost 1.34.0 终于5.12发布了
  5. 数字三角形(洛谷-P1216)
  6. PHP学习笔记02:自然数列求和
  7. 解决ubuntu未安装无线网卡驱动的问题
  8. R语言CRAN软件包Meta分析 1
  9. 使用JSON数据报错和方法
  10. 团队作业9——测试与发布(Beta版本)(含展示博客)
  11. [转载]sed实现直接修改文件内容
  12. 考研高等数学张宇30讲笔记——第十讲 积分等式与积分不等式
  13. VS 2013编译xvid
  14. html单元格加斜线,怎样在表格中加斜线 选中第一个单元格,进入下一步
  15. 汽车CAN总线数据帧分类及格式详解
  16. 百度echart世界各国及国内省市经纬度坐标
  17. 企业信息化将推动企业组织结构和管理模式的变革
  18. Landsat系列卫星数据应用介绍
  19. 轻松查询多个中通速递发出物流中含有某个城市的单号
  20. java设计模式 之适配器模式

热门文章

  1. 蚂蚁金服招聘-高级数据技术工程师、大数据研发工程师/专家
  2. Linux宝库名人轶事栏目 | 笨叔与Linux的那些事(下)
  3. 毕设题目:Matlab回归预测
  4. icons在java显示出来_java – 制作jfilechooser显示图像缩略图
  5. mysql数据库回滚日志_Mysql数据库慢查询日志的使用
  6. 南昌计算机学校哪家最可靠,南昌问题孩子管教学校哪家靠谱
  7. 随笔记——Apache
  8. swfupload 实例 php,文件上传之SWFUpload插件(代码)_php实例
  9. ubuntu下载python3.8_ubuntu16.04纯净版-安装Python3.8.1/升级pip
  10. sliverlight+WCF项目发布到IIS