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

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

上述类图中,实线边框的是实现类,比如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集合继承_java集合继承关系相关推荐

  1. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  2. java族谱设计_Java集合族谱总结

    集合族谱核心成员 集合族谱核心成员 所有的集合类,都实现了Iterator接口,这是用于遍历集合中元素的接口:Java集合框架核心是两个类型的容器,一种是集合(Collection),存储单一元素,一 ...

  3. Java集合学习_Java集合学习(适合新手)

    集合框架 由⼀组类和接⼝组成的⼀个体系. Collection 集合框架 最基本的接⼝,⼀个 Collection 可以存储⼀组⽆序.不唯⼀的对象,实际开发中不会直接使⽤ Collection 进⾏开 ...

  4. java集合总结_java集合小总结

    java集合就是一个容器. 1.     集合概述 l       为了保存不确定的数据,或者对象,以及保存具有映射关系的数据. l       所有的集合类都位于java.util包下. 1.1.  ...

  5. java final与继承_Java 之继承和 final 关键字

    继承的概述 继承的特点 super 关键字 函数覆盖 子类的实例化过程 final 关键字 1. 继承的概述 继承是类与类之间的关系. 继承的好处: 提高了代码的复用性 让类与类之间产生了关系, 给第 ...

  6. java hasset 顺序_java集合排序问题

    List: 元素是有序的,元素可以重复,因为该集合体系有索引(脚标) 常用的子类对象: 1----ArrayList 底层的数据结构是使用的数组结构特点:查询速度快,但是增删比较慢 2----Link ...

  7. java集合示例_Java集合的addAll()方法和示例

    集合类addAll()方法addAll()方法在java.lang包中可用. addAll()方法用于将所有给定元素(ele)放入给定集合(co). addAll()方法是一个静态方法,可以使用类名进 ...

  8. java treeset原理_Java集合 --- TreeSet底层实现和原理(源码解析)

    概述 文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明. TreeSet实现了S ...

  9. java集合系列_Java集合系列01-Java集合概述

    1.Java集合基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量,因为数组长度在初始化时指定,意味着只能保存 ...

最新文章

  1. Single Number II(LintCode)
  2. javascript高级程序设计之函数表达式
  3. django项目实战(2)-数据库配置
  4. 三国志战略版360区S4服务器合并信息,三国志战略版S2赛季合区须知,季转服功能介绍...
  5. 数据库-优化-数据库结构的优化-数据类型
  6. ORA-29807: specified operator does not exist
  7. Smack 3.3.1 发布,Java 的 XMPP 开发包
  8. (转)Spring Boot(十二):Spring Boot 如何测试打包部署
  9. day4-mysql数据关系
  10. 2-设置文件类型扩展名
  11. Python入门--文件的读写
  12. 停止标记NYOJ 一个简单的数学题 南工330停止标记
  13. 编译原理研究性学习专题 2——递归下降语法分析设计原理与实现
  14. 永洪BI还能这样玩?3招让用户权限管理不再繁琐
  15. 功能最强大的编辑器——vi
  16. BZOJ4556 HEOI2016 字符串
  17. 遥感影像处理2——目视解译
  18. webshell检测方式深度剖析---RASP(taint扩展)
  19. 蓝墨云班课网页版下载资源文件
  20. JAVA中的String[] args和String args[]详解。

热门文章

  1. 2015/8/18 Python基本使用(2)
  2. Tomcat JVM 初始化加大内存
  3. IT人的素质 设计杂谈
  4. 解读OpenShift的逻辑架构和技术架构
  5. 4本数据库新书,大神都在追着看
  6. 年终总结 Trustdata:2017年中国移动互联网行业发展分析报告
  7. FreeModbus源码获取
  8. 2万字详解,彻底讲透 全文搜索引擎 Elasticsearch
  9. 面试又栽在JVM调优上了!
  10. 使用Java8的进来,这几个方法不香吗?