java基础内容学习.docx

上传人:b****6 文档编号:6004320 上传时间:2023-01-02 格式:DOCX 页数:22 大小:45.08KB
下载 相关 举报
java基础内容学习.docx_第1页
第1页 / 共22页
java基础内容学习.docx_第2页
第2页 / 共22页
java基础内容学习.docx_第3页
第3页 / 共22页
java基础内容学习.docx_第4页
第4页 / 共22页
java基础内容学习.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

java基础内容学习.docx

《java基础内容学习.docx》由会员分享,可在线阅读,更多相关《java基础内容学习.docx(22页珍藏版)》请在冰豆网上搜索。

java基础内容学习.docx

java基础内容学习

1课程名称:

集合

2知识点概述

2.1、上次课程

2.2、作业讲解

2.3、本次预备讲解的知识点

1、Collection接口、List接口、Set接口的作用及关系

2、Map接口的作用

3、集合的四种输出方式及使用区别

4、集合的常用操作子类

3、具体内容

3.1、认识类集

在编程时,常常需要集中存放多个数据,当然我们可以使用数组来保存多个对象。

但数组的长度不可变化,一旦在初始化数组是指定了数组的长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数组就有点无能为力了;而数组也无法保存具有映射关系的数据,如成绩表:

语文--79,数学—80,这种数据看上去像两个数组,但这两个数组直接的元素具有一定的关联关系。

为了保存数量不确定的数据,以及保存具有映射关系的数据(也称为关联数组),java提供了集合类,集合类主要负责保存,盛放其他数据,因此集合类也被称为容器类。

所有的集合类都位于java.util包下。

Java的集合类主要由以下接口派生而出:

1.Collection系类接口——单值操作接口

a)Collection接口派生出Set、Queue、List三个子接口

2、Map系类接口——对值操作接口,由key-value对组成

常用实现类为:

HashMap、properties、SortedMap

此外还经常用到如下接口:

1、SortedSet、SortedMap排序的操作接口

2、Interator、ListInterator输出集合中元素的接口

结构如图:

三种常用集合特点

|-Set集合无序不能重复

|-List集合有序可重复

|-map集合Key不可重复、value可重复

3.2、Collection接口

3.2.1、collection接口的定义

Colletion接口的定义

publicinterfaceCollection

extendsIterable

在JDK1.5之后,collection接口使用了泛型的定义,在操作时必须指定具体的操作类型,这样可以保证类操作的安全性,避免发生ClassCastException异常

Collection接口是单值存放的最大父接口,可以向其中保存多个单值(单个对象)数据,Collection接口里定义了如下操作集合元素的方法:

(详见API)

No

方法

类型

描述

1

publicbooleanadd(Ee)

普通

向集合中添加元素

2

publicbooleanaddAll(Collection

extendsE>c)

普通

向集合中添加一组数据,泛型指定了操作上限

3

publicvoidclear()

普通

清空所有集合中的所有元素

4

publicbooleancontains(Objecto)

普通

判断是否有指定的内容,查找

5

publicbooleancontainsAll(Collection

>c)

普通

查找一组数据是否存在

6

publicbooleanequals(Objecto)

普通

比较对象是否相等

7

publicinthashCode()

普通

返回hash码

8

publicbooleanisEmpty()

普通

判断集合是否为空

9

publicIteratoriterator()

普通

为interator接口实例化,迭代输出

10

publicbooleanremove(Objecto)

普通

从集合中删除指定的对象

12

publicbooleanremoveAll(Collection

>c)

普通

从集合中删除一组对象

13

publicbooleanretainAll(Collection

>c)

普通

从集合中保留指定的集合

14

publicintsize()

普通

获取集合中元素的个数

15

publicObject[]toArray()

普通

取得集合中全部的元素,以数组的形式返回

16

publicT[]toArray(T[]a)

普通

返回包含此collection中所有元素的数组,可指定返回数组的类型

在一般开发中,往往很少直接直接使用Collection接口进行开发,基本上都是是其使用子接口,子接口主要有List、set、Query和StortedSet

3.2.2、collection子接口的定义

Collection接口虽然是集合的最大接口,但如果直接使用Collection接口进行操作,则表示操作意义不明确,所以在java开发中不提倡直接使用collection接口,主要子接口介绍如下:

|-List:

可以存放重复的内容

|-Set:

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

|-Queue:

队列接口

|-SortedSet:

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

3.3、List接口

List是Collection的子接口,其中可以保存各个重复的内容,此接口定义如下:

publicinterfaceList

extendsCollection

但与Collection不同的是,在List接口中大量的扩充了Collection接口,拥有了比Collection接口中更多的方法定义,其中有些方法还比较常用。

List对Collection接口的扩展方法如下:

详见API

No

方法

类型

描述

1

publicadd(intindex,Eelement)

普通

将元素element放入在List集合的index出

2

publicaddAll(intindex,Collection

extendsE>c

普通

将集合c所包含的所有元素都放入在List集合的index出,泛型指定了操作上限

3

publicEget(intindex)

普通

返回集合index索引处的元素

4

publicintindexOf(Objecto)

普通

返回对象o在集合中第一次出现的位置索引,如果此集合不包含该元素,则返回-1。

5

publicBooleancontainsAll(Collection

>c)

普通

查找集合C中的数据是否存在指定集合中存在

6

publicintlastIndexOf(Objecto)

普通

返回此集合中最后出现的指定元素的索引;如果集合不包含此元素,则返回-1

7

publicListIteratorlistIterator()

普通

返回listIterator实例

8

publicListIteratorlistIterator(intindex)

普通

返回从指定位置开始的listiterator实例

9

publicEremove(intindex)

普通

从集合中删除指定位置的元素

10

publicEset(intindex,Eelement)

普通

用指定元素替换列表中指定位置的元素

12

publicListsubList(intfromIndex,inttoIndex)

普通

返回集合中指定的下标fromIndex(包括)和toIndex(不包括)之间的子集合,

如果使用想要使用此接口,则需要通过其子类进行实例化

3.3.1、List接口的常用子类

1、子类ArrayList

ArrayList是List的子类,可直接通过对象的多态性为List接口实例化,此类的定义如下:

publicclassArrayList

extendsAbstractList

implementsList,RandomAccess,Cloneable,Serializable

可看出ArrayList继承了AbstractList,AbstractList类的定义如下:

publicabstractclassAbstractList

extendsAbstractCollection

implementsList

此接口实现了List接口,所以可以直接使用ArrayList为List接口实例化

示例代码:

(向集合中添加元素)

说明:

从程序运行中可以发现,使用List中的add(intindex,Eelement)方法可以在集合中指定位置增加元素,而其他两个add()方法只能在集合的最后进行内容的追加

示例代码:

(删除元素)

说明:

可同下标和对象的方式直接对集合进行删除

示例代码:

(输出List中的内容)

说明:

List集合增加到的顺序就是输出后的顺序,本身顺序不会改变

实例代码:

(将集合变为对象数组)

示例代码:

(集合中的其他操作)

2、LinkedList子类、Queue接口

LinkedList表示链表的操作类,即java中已经为开发者提供好了一个链表程序,开发者直接使用即可,无需重复开发,LinkedList类的定义如下:

publicclassLinkedList

extendsAbstractSequentialList

implementsList,Deque,Cloneable,Serializable

此类实现了List接口,但同时也实现了Queue接口。

Queue表示的是队列操作接口,采用FIFO(先进先出)的操作方法,就好像一队人排队那样,队列中有对头和队尾,队头永远指向新加入的对象,Queue是Collection的子接口,其定义如下:

publicinterfaceQueue

extendsCollection

Queue接口定义的方法如下:

详见API

NO

方法

1

add(E e)

2

element()

3

offer(E e)

4

peek()

5

poll()

6

remove()

在LinkedList类中除了实现以上的方法外,还提供了如下方法:

详见API

NO

方法

1

addFirst(E e)

2

addLast(E e)

3

offer(E e)

removeFirst()

removeLast()

示例代码:

(链表的开头和结尾增加数据)

示例代码 :

(找到链表头)

示例代码:

(以先进先出的方式取出全部的数据)

3.4、Set接口

Set接口也是Collection的子接口,但是与Collection和List接口不同的是,Set接口中不能加入重复的元素。

Set接口定义如下:

publicinterfaceSet

extendsCollection

从定义可以发现set接口和List接口没有头太大差异,但是Set接口的主要方法和Collection一致的,也就是说set接口并没有对Collection接口进行扩充,只是比Collection接口的要求更加严格了,不能增加重复元素

Set接口的实例不能像List接口那样进行双向输出,因为此接口没有提供像list接口定义的get(intindex)方法

3.4.1、Set接口的常用子类

1、散列的存放:

HashSet

HashSet是set接口的一个子类,主要的特点是:

里面不能存放重复元素,而且采用散列的存储方式,所以没有顺序

实例代码:

(HashSet类)

说明:

从程序运行结果可以看出,重复元素只能增加一次,而且程序运行时向集合加入元素的顺序并不是集合中保存的顺序,证明HashSetl类中的元素是无序排列的

2、有序存放:

TreeSet

如果想对输入的数据进行排序,则要使用TreeSet子类,TreeSet类定义如下:

publicclassTreeSet

extendsAbstractSet

implementsNavigableSet,Cloneable,Serializable

TreeSet继承了AbstractSet类,此类定义如下:

publicabstractclassAbstractSet

extendsAbstractCollection

implementsSet

示例代码:

(验证TreeSet)

说明:

程序在向集合中添加数据时是没有顺序的,但输出之后是有序的,所以TreeSet是可以排序的子类

3、关于TreeSet排序的说明

既然TressSet本身是可以排序的,那么现在定义一个自己的类,是否也可要进行排序操作呢?

示例代码:

(自定义类排序)

说明:

出现类型转换异常,因为TreeSet中的元素是有序存放的,所以对于一个对象必须指定好其排列规则,且TressSet中的每个对象所在的类都必须实现Comparable接口才可正常是使用

示例代码:

(指定排列规则)

说明:

从程序运行结果中发现,重复的“吕子乔”没有加入,但年龄重复的“美嘉“没有添加到集合中,这是由于采用了比较器造成的,因为比较器操作时如果某个属性没有进行比较的指定,则也会认为是同一个对象,所以此时应该在Person类中compareTo方法中增加姓名比较

示例代码:

(修改Person比较器)

说明:

此时,运行结果中出现了年龄重复的“美嘉”,而且去掉了重复内容,但此时重复内容去掉,并不是真正意义上的去掉重复元素。

因为此时靠的是Comparable完成的,而如果换成HashSet则也会出现重复内容,所以要想真正的去掉重复元素,则必须深入研究Object类

4、关于重复元素的说明

观察以下代码:

示例代码:

(加入重复对象)

说明:

从程序运行结果可以发现“吕子乔”元素重复了,也就是说,此时的程序并没有像Set接口规定的那样是不允许有重复元素的,而如果此时想要去掉重复元素,则必须首先进行对象是否重复的判断,而要想进行这样的判断则一个类就必须重写Object类中的equals方法,才能完成对象是否相等的判断,但是只重写equals()方法是不够的,还需要重写hashCode()方法,此方法表示一个哈希编码,可以简单的理解为表示一个对象的编码。

一般的哈希吗是通过公式进行计算的,可以将类中的全部属性进行适当的计算,以获取不能重复的哈希码

示例代码:

(去掉重复元素)

说明:

集合中的重复元素消失了,就是因为equals()和hashCode()共同作用的结果

3.5、SortedSet接口

从TreeSet类的定义中可以发现,TreeSet类中实现了StrtedSet接口,此接口主要用于排序操作,即实现此接口的子类都属于排序的子类,SortedSet接口定义如下:

publicinterfaceSortedSet

extendsSet

此接口也继承了Set接口,此接口中定义了如下方法:

NO

方法

1

comparator()

2

first()

3

headSet(E toElement)

4

last()

5

subSet(E fromElement,E toElement)

6

tailSet(E fromElement)

示例代码:

(验证SortedSet接口)

3.6、集合的输出

之前我们知道,如果输出Collection,set集合中的内容,可以将其转换为数组输出,而是用list则可直接通过get()方法输出,但这些不是集合的标准输出方式,在类集合中提供了如下4中常见的输出方式:

1、Iterator:

迭代输出,是用最多的方式

2、ListIterator:

是Iterator的子接口,功能与Lterator类似

3、Enumeration:

是一个旧接口,功能与Iterator类似

4、foreach:

JDK1.5以后的新功能,可以输出输出或集合

3.6.1、Iterator迭代输出

1、Iterator接口

在使用集合输出时必须形成一个思路,“只要碰到了集合输出的操作,就一定使用Iterator接口”,因为这是一个最为标准的做法

Iterator是专门迭代输出接口,所谓迭代输出就是将元素一个一个进行判断,判断其是否有内容,如果有内容则把内容取出,Iterator接口的定义如下:

publicinterfaceIterator

Iterator接口在使用时也要使用泛型,当然此处的泛型最好与集合中的泛型类型一致,此此接口定义的方法如下:

(详见API)

NO

方法

说明

1

hasNext()

2

next()

3

remove()

2、Iterator接口的相关操作

Iterator接口,可以直接使用Collection接口中定义的Iterator()方法为其实例化,既然Collecting接口中存在了此方法,则List和Set接口中也一定存在此方法,所有也可以通用使用Iterator接口输出。

示例代码:

(输出Collection中的全部内容)

说明:

集合类的标准输出形式,(重点掌握),将集合中的元素一个一个输出

示例代码:

(使用Iterator删除指定内容)

示例代码:

(迭代输出时删除元素的注意点)

正常情况下,一个集合要把内容交给iterator输出,但集合操作也存在一个remove()方法,如果在使用iterator输出集合时自己调用了删除的方法,则会出现运行错误。

示例代码:

(不正确的删除方法)

说明:

从程序运行结果中可以发现,内容却是被删除了,但迭代输出在内容被删除之后就终止了。

因为集合本身内容被破换掉,所有迭代输出将出现错误,会停止输出。

3.6.2、ListIterator双向迭代输出

1、ListIterator接口简介

Iterator接口的主要功能是由前向后单向输出,而此时如果实现由后向前或是由前向后的双向输出,则必须使用Iterator的子接口----ListIterator,定义如下:

publicinterfaceListIterator

extendsIterator

此接口比Iterator接口中定义了更多的方法,具体如下:

(详见API)

NO

方法

说明

1

add(E e)

2

hasNext()

3

hasPrevious()

4

next()

5

nextIndex()

6

previous()

7

previousIndex()

8

remove()

9

set(E e)

与Iterator接口不同的是,ListIterator接口只能通过List接口实例化,即只能输出list接口的内容,在List接口中定义可以为ListIterator接口实例化的方法ListIterator().

2、ListIterator接口的相关操作

示例代码:

(进行双向迭代)

说明:

1、此输出方式只有list接口才可以做到

2、如果想完成由后向前的输出,则一定要先进行由前向后的输出

示例代码:

(增加即替换元素)

说明:

虽然add()或set()方法可以增加和替换集合中的元素,但在开发中不建议使用。

3.6.3、java的新支持:

foreach

foreach除了可以完成数组输出,对于集合同样支持,语法如下:

for(类对象:

集合)

{

//集合操作

}

示例代码:

(使用foreach输出)

说明:

虽然foreach使用较简单,在实际的开发中iterator还是较多

3.7、Map接口

3.7.1、Map接口简介

Collection、List、set接口都是单值的操作,即每次只能操作一个对象,而map与他们不同的是,每次操作是一对对象,即二元偶对象,map中的每个元素都使用key—value对的形式存储在集合中。

Map接口的定义如下:

publicinterfaceMap

map也使用了泛型,必须同时设置还key或value的类型,在map中美一对key—value都表示一个值,map接口提供的如下方法:

(详见API)

NO

方法

clear()

containsKey(Object key)

containsValue(Object value)

entrySet()

equals(Object o)

get(Object key)

hashCode()

isEmpty()

keySet()

put(K key,V value)

putAll(Map

extendsK,?

extendsV> m)

remove(Object key)

size()

values()

3.7.2、Map.Entry接口简介

Map.Entry是Map内部定义的一个接口,专门用来保存key---value的内容,Map.Entry定义如下:

publicstaticinterfaceMap.Entry

Map.Entry是使用static关键字声明的内部接口,此接口可以通过“外部类.内部类”的形式直接调用,本接口定义方法如下:

NO

方法

说明

1

equals(Object o)

2

getKey()

3

getValue()

4

hashCode()

5

setValue(V value)

我们可以把Map理解成一个特殊的Set,只是该set里包含的集合元素时Entry对象。

3.7.3、Map接口的常用子类

Map接口常用的子类如下:

1、HashMap:

无序存放,是新的操作类,key不允许重复

2、Hashtable:

无序存放,是旧的操作类,key不允许重复

3、TreeMap:

可以排序的map集合,按集合的key排序,key不允许重复

1、新的子类:

HashMap

HashMap本身是Map子类,直接使用此类为map接口实例化即可。

Hashmap定义如下:

publicclassHashMap

extendsAbstractMap

implementsMap,Cloneable,Serializable

HashMap是AbstractMap的子类,abstractMap类的定义如下:

publicabstractclassAbstractMap

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1