您的位置:首页 > 编程语言 > Java开发

JavaSE_32th_容器(类集框架)

2017-02-26 18:15 295 查看
一、容器的概念

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 容器 类集框架