JavaSE_32th_容器(类集框架)
2017-02-26 18:15
295 查看
一、容器的概念
1、介绍
数组就是容器的一种,数组的长度固定,不适合做变化的需求,Java提供了类集框架供我们使用。
1)类集框架是一组类和接口
2)位于java.util包当中
3)主要用于存储和管理对象
a、使用数组时候,当内容扩充时,需要考虑数组边界,数组的容量是有限的,而类集框架的容量是可以随时扩充的。
b、数组可以是基本类型,也可以是引用类型,集合只能是引用类型。
c、数组只能存储同一种类型的数据,集合可以存储不同类型(其实集合一般存储的也是同一种类型)。
4)类集框架主要分为三大类:列表、集合、映射。
2、类集框架结构图
以下将类集框架泛称容器。
二、容器API
J2SDK所提供的容器API位于java.util包内。
容器API的类图结构如下图所示:
1、Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存取方式。
1)Set中的数据对象没有顺序,且不可以重复。
2)List中的数据对象有顺序且可以重复。
什么叫重复的对象,如果两个对象equals,则认为两个对象相等,引用值相等。
2、Map接口定义了存取键(key)—值(value)映射对的方法。
1)键相当于x,值相当于y,一个x只能对应唯一的y,如x1 -> y1、x2 -> y2、x3 -> y3。
2)也就是说一个键只能对应于一个值,一个键只能索引到一个对象,键不能即对应于对象a,又对应于对象b。
3)在Map的实现类中,键不能重复,就算同样的键映射到同样的对象也不行。
4)两个键怎样被认为是重复的呢?
如果两个键的hashCode一样,就认为两个键重复。
5)重写一个类的equals()方法时,一定要重写其hashCode()方法。原因如下:
a、对于两个看起来equals的对象(内部属性都相等),如果作为键的话,就应当认为是相同的键,但Java在判断两个键是否相等时是根据它们的hashCode来判断的而不是根据equals()方法。
b、而Object类的hashCode()方法相当于是返回该对象在堆中的地址,也就是说就算两个对象再怎么相等,两者的地址是绝对不会相等的。
c、如果两个对象看起来equals,但因为hashCode不一样而被认为是不同的键,那看起来就会像是同样的键既指向对象a,又指向对象b,所以为了防止这样的情况出现,在重写一个类的equals()方法的同时,一定要重写其hashCode()方法,即保证看起来相同的两个对象拥有同样的hashCode。
6)为什么Java使用hashCode()方法而不是equals()方法来判断两个对象是否相等?
因为在判断若干个对象是否有重复(即相等)时,使用equals()方法的效率比较低,而使用hashCode的效率比较高。
1、介绍
数组就是容器的一种,数组的长度固定,不适合做变化的需求,Java提供了类集框架供我们使用。
1)类集框架是一组类和接口
2)位于java.util包当中
3)主要用于存储和管理对象
a、使用数组时候,当内容扩充时,需要考虑数组边界,数组的容量是有限的,而类集框架的容量是可以随时扩充的。
b、数组可以是基本类型,也可以是引用类型,集合只能是引用类型。
c、数组只能存储同一种类型的数据,集合可以存储不同类型(其实集合一般存储的也是同一种类型)。
4)类集框架主要分为三大类:列表、集合、映射。
2、类集框架结构图
Collection |--List |--ArrayList |--Vector |--LinkedList |--Set |--HashSet |--TreeSet Map |------------|--HashMap
以下将类集框架泛称容器。
二、容器API
J2SDK所提供的容器API位于java.util包内。
容器API的类图结构如下图所示:
1、Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存取方式。
1)Set中的数据对象没有顺序,且不可以重复。
2)List中的数据对象有顺序且可以重复。
什么叫重复的对象,如果两个对象equals,则认为两个对象相等,引用值相等。
2、Map接口定义了存取键(key)—值(value)映射对的方法。
1)键相当于x,值相当于y,一个x只能对应唯一的y,如x1 -> y1、x2 -> y2、x3 -> y3。
2)也就是说一个键只能对应于一个值,一个键只能索引到一个对象,键不能即对应于对象a,又对应于对象b。
3)在Map的实现类中,键不能重复,就算同样的键映射到同样的对象也不行。
4)两个键怎样被认为是重复的呢?
如果两个键的hashCode一样,就认为两个键重复。
5)重写一个类的equals()方法时,一定要重写其hashCode()方法。原因如下:
a、对于两个看起来equals的对象(内部属性都相等),如果作为键的话,就应当认为是相同的键,但Java在判断两个键是否相等时是根据它们的hashCode来判断的而不是根据equals()方法。
b、而Object类的hashCode()方法相当于是返回该对象在堆中的地址,也就是说就算两个对象再怎么相等,两者的地址是绝对不会相等的。
c、如果两个对象看起来equals,但因为hashCode不一样而被认为是不同的键,那看起来就会像是同样的键既指向对象a,又指向对象b,所以为了防止这样的情况出现,在重写一个类的equals()方法的同时,一定要重写其hashCode()方法,即保证看起来相同的两个对象拥有同样的hashCode。
6)为什么Java使用hashCode()方法而不是equals()方法来判断两个对象是否相等?
因为在判断若干个对象是否有重复(即相等)时,使用equals()方法的效率比较低,而使用hashCode的效率比较高。
相关文章推荐
- (面试题四)【JAVAse部分】集合框架
- JavaSE 集合框架(2)- Set集合
- java4android__41集到43集类集框架
- 【JDK】:Java容器框架
- 基于Consul+Registrator+Nginx实现容器服务自动发现的集群框架 推荐
- 《Java并发编程的艺术》读书笔记——并发容器框架
- Java并发容器和框架
- 黑马程序员——java基础知识之集合框架(容器)
- JAVA | 51 - 类集框架 | List 接口
- 【从零写javaweb框架】(四)实现Bean容器
- JAVA | 58 - 类集框架 | Stream |
- Java基础知识学习四(类集框架)
- JavaSE_88_容器类
- Spring应用、原理以及粗读源码系列(一)--框架总述、以Bean为核心的机制(IoC容器初始化以及依赖注入)
- 深入理解Spring4框架(二)——容器
- 到底什么是javaEE、什么是JavaSE,我们用Spring等框架用的jdk到底是什么的思考
- Java学习笔记-----中间件,组件,容器,框架的精彩理解
- Java的类集框架之ArrayList与OC中的可变数组
- java容器框架图
- JavaSE 拾遗(8)——JavaSE 集合框架