MLDN 开发实战经典 第十三章 Java类集.docx

上传人:b****8 文档编号:29811773 上传时间:2023-07-27 格式:DOCX 页数:71 大小:2.76MB
下载 相关 举报
MLDN 开发实战经典 第十三章 Java类集.docx_第1页
第1页 / 共71页
MLDN 开发实战经典 第十三章 Java类集.docx_第2页
第2页 / 共71页
MLDN 开发实战经典 第十三章 Java类集.docx_第3页
第3页 / 共71页
MLDN 开发实战经典 第十三章 Java类集.docx_第4页
第4页 / 共71页
MLDN 开发实战经典 第十三章 Java类集.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

MLDN 开发实战经典 第十三章 Java类集.docx

《MLDN 开发实战经典 第十三章 Java类集.docx》由会员分享,可在线阅读,更多相关《MLDN 开发实战经典 第十三章 Java类集.docx(71页珍藏版)》请在冰豆网上搜索。

MLDN 开发实战经典 第十三章 Java类集.docx

MLDN开发实战经典第十三章Java类集

第十三章Java类集

在创建Java数组时,必须明确指定数组的长度,数组一旦创建,其长度就不能被改变。

在许多应用场合,一组数据的数目是不固定的,比如一个单位的员工数目是变化的。

为了使用程序能方便地存储和操纵数目不固定的一组数据,JDK类库提供了Java类集(集合),所有Java类集都位于java.util包中。

Java类集中不能存放基本类型数据,而只能存放对象的引用。

⏹Java类集主要分为以下3种类型:

⏹Set(集):

集合中的对象不按特定方式排序,并且没有重复对象。

⏹List(列表):

集合中的对象按照索引位置排序,可以有重复对象。

⏹Map(映射):

集合中的每一个元素包含一对键对象和值对象,没有重复的键对象,值对象可以重复。

在Java中必须掌握的知识点,会开发的:

1、面向对象

2、Java的类集

3、JavaIO

4、JDBC

1、认识类集、Collection接口

1.1、课程目标

⏹掌握Java设置类集框架的目的

⏹掌握类集中的各个主要接口

⏹掌握Collection接口的作用

1.2、具体内容

类集的作用

类集实际上就是一个动态的对象数组,与一般的对象数组不同,类集中的对象内容可以任意扩充。

类集的特征:

⏹这种框架是高性能的

⏹框架必须允许不同类型的类集以相同的方式和高度互操作方式工作

⏹类集必须是容易扩展和修改的

对象数组的操作中基本上都要保证对象类型的一致性,对于类集而言本身其内容元素也应该保持一致,不管是何种类型的数据,所有的操作方式都应该是一样的。

类集框架主要接口

No.

接口

描述

1

Collection

是存入一组单值的最大接口,所谓的单值是指集合中的每个元素都是一个对象。

一般很少直接使用此接口直接操作。

2

List

是Collection接口的子接口,也是最常用的接口,此接口对Collection接口进行了大量的扩充,里面的内容是允许重复的。

3

Set

是Collection接口的子类,没有对Collection接口进行扩充,里面不允许存放重复内容

4

Map

Map是存放一对值的最大接口,即接口中的每个元素都是一对,以key->value形式保存

5

Iterator

集合的输出接口,用于输出集合中的内容,只能进行从前到后的单向输出

6

ListIterator

是Iterator的子类接口,可以进行双向输出

7

Enumeration

是最早的输出接口,用于输出指定集合中的内容

8

SortedSet

单值的排序接口,实现此接口的集合类,里面的内容是可以排序的,使用比较器排序

9

SortedMap

存放一对值的排序接口,实现此接口的集合类,内容按照key排序,使用比较器排序

10

Queue

队列接口,此接口的子类可以实现队列操作

11

Map.Entry

Map.Entry的内部接口,每个Map.Entry对象都保存着一对key->value的内容,每个Map接口中都保存多个Map.Entry接口实例。

以上的接口必须全部掌握。

并且掌握各个接口的主要特点。

Collection接口的的定义

⏹Collection是保存单值集合的最大父接口。

⏹Collection接口定义:

◆publicinterfaceCollectionextendsIterable

⏹JDK1.5之后为Collection接口增加了泛型声明

所有的类集操作都存放在java.util包中

Collection方法定义

方法摘要

 boolean

add(E e)确保此collection包含指定的元素(可选操作)。

 boolean

addAll(Collection

extendsE> c)将指定collection中的所有元素都添加到此collection中(可选操作)。

 void

clear()移除此collection中的所有元素(可选操作)。

 boolean

contains(Object o)如果此collection包含指定的元素,则返回true。

 boolean

containsAll(Collection

> c)如果此collection包含指定collection中的所有元素,则返回true。

 boolean

equals(Object o)比较此collection与指定对象是否相等。

 int

hashCode()返回此collection的哈希码值。

 boolean

isEmpty()如果此collection不包含元素,则返回true。

 Iterator

iterator()返回在此collection的元素上进行迭代的迭代器。

 boolean

remove(Object o)从此collection中移除指定元素的单个实例,如果存在的话(可选操作)。

 boolean

removeAll(Collection

> c)移除此collection中那些也包含在指定collection中的所有元素(可选操作)。

 boolean

retainAll(Collection

> c)仅保留此collection中那些也包含在指定collection的元素(可选操作)。

 int

size()返回此collection中的元素数。

 Object[]

toArray()返回包含此collection中所有元素的数组。

T[]

toArray(T[] a)返回包含此collection中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

Collection接口的使用注意

在一般的开发中,往往很少去直接使得Collection接口进行开发,而基本上都是使用其子接口。

子接口主要有:

List、Set、Queue、SortedSet。

之所以不使用Collection接口也是Java的逐步发展形成的,最早的时候实际上Collection接口被广泛使用,因为EJB技术的支持,在EJB2.x中大量的使用了Collection接口,但是随着发展,SUN公司开始将这些标准进行逐步的规范化,所以在SUN一个开源——宠物商店,基本上就不再直接使用Collection了,而是使用List或Set,这样来说可以更加清楚的表示出操作的类型。

Collection子接口的定义

Collection接口虽然是集合的最大接口,从但是如果直接使用Collection接口进行操作的等方面,则表示的操作意义不明确,所以在Java开发中已经不提倡直接使用Collection接口了,主要的子接口如下:

⏹List接口:

可以存放重复的内容。

⏹Set接口:

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

⏹Queue:

队列接口

⏹SortedSet接口:

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

1.3、总结

2、List接口

2.1、本章目标

⏹掌握List接口与Collection接口的关系

⏹掌握List接口的常用子类:

ArrayList、Vector

⏹掌握ArrayList与Vector类的区别

2.2、具体内容

Collection下分为很多的子接口,其中有一个List接口,List接口中可以存放任意的数据。

而且在List接口中内容是允许重复的。

List接口的功能要比Collection接口强大很多,因为大量的扩充了Collection接口的操作。

如果要想使用接口,则肯定要使用对象的多态性进行实例化的操作,那么对于List接口本身也是一样的。

ArrayList类是List中最常用的子类。

importjava.util.ArrayList;

importjava.util.List;

publicclassArrayListDemo{

publicstaticvoidmain(Stringargs[]){

ListallList=null;

allList=newArrayList();//指定操作的泛型为String

allList.add(“Hello”);//此方法由Collection接口而来

allList.add(“World”);//默认情况下向最后加入

System.out.println(allList);

}

};

指定位置上添加一组数据,添加的方法是List接口扩充的方法

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Collection;

publicclassArrayListDemo01{

publicstaticvoidmain(Stringargs[]){

ListallList=null;

CollectionallCollection=null;

allList=newArrayList();//指定操作的泛型为String

allCollection=newArrayList();//指定一个集合

allList.add("Hello");//此方法由Collection接口而来

allList.add(0,"World");//在第一个位置上添加新的内容

System.out.println(allList);

allCollection.add("LXH");//向Collection中加入内容

allCollection.add("");

allList.addAll(allCollection);//把集合allCollection加入到allList中

allList.addAll(0,allCollection);//加入到指定的第1个位置

System.out.println(allList);

}

};

既然可以增加数据,那么就可以删除数据

List中存在两种删除:

根据对象内容、根据对象编号

importjava.util.ArrayList;

importjava.util.List;

publicclassArrayListDemo02{

publicstaticvoidmain(Stringargs[]){

ListallList=null;

allList=newArrayList();//指定操作的泛型为String

allList.add("Hello");//此方法由Collection接口而来

allList.add(0,"World");//在第一个位置上添加新的内容

allList.add("MLDN");//向Collection中加入内容

allList.add("");

allList.remove(0);//删除第一个元素,指定删除的位置

allList.remove("Hello");//此方法由Collection接口继承而来

System.out.println(allList);//输出的是集合

}

};

集合中的内容可以添加,可以删除,那么实际上最重要的就是输出(输出的是元素)。

⏹在List接口中提供了get()方法,利用此方法就可以完成输出。

⏹通过循环完成输出,循环的次数由size()方法取得。

importjava.util.ArrayList;

importjava.util.List;

publicclassArrayListDemo03{

publicstaticvoidmain(Stringargs[]){

ListallList=null;

allList=newArrayList();//指定操作的泛型为String

allList.add("Hello");//此方法由Collection接口而来

allList.add("Hello");//此方法由Collection接口而来

allList.add(0,"World");//在第一个位置上添加新的内容

allList.add("MLDN");//向Collection中加入内容

allList.add("");

System.out.print("由前向后输出:

");

for(inti=0;i

System.out.print(allList.get(i)+"、");

}

System.out.print("\n由后向前输出:

");

for(inti=allList.size()-1;i>=0;i--){

System.out.print(allList.get(i)+"、");

}

}

};

结果:

由前向后输出:

World、Hello、Hello、MLDN、、

由后向前输出:

、MLDN、Hello、Hello、World、

此输出方式是List接口所独有的,而其他接口是没有的,尤其是Collection中是没有根据索引取出内容的操作。

importjava.util.ArrayList;

importjava.util.List;

publicclassArrayListDemo04{

publicstaticvoidmain(Stringargs[]){

ListallList=null;

allList=newArrayList();//指定操作的泛型为String

allList.add("Hello");//此方法由Collection接口而来

allList.add(0,"World");//在第一个位置上添加新的内容

allList.add("MLDN");//向Collection中加入内容

allList.add("");

Stringstr[]=allList.toArray(newString[]{});//指定好类型

System.out.print("指定数组类型:

");

for(inti=0;i

System.out.print(str[i]+"、");

}

System.out.print("\n返回对象数组:

");

Objectobj[]=allList.toArray();//返回Object类型

for(inti=0;i

Stringtemp=(String)obj[i];//进行向下转型

System.out.print(temp+"、");

}结果:

指定数组类型:

World、Hello、MLDN、、

}返回对象数组:

World、Hello、MLDN、、

};

既然已经完成基本的输出功能,集合中还有以下的几个操作:

判断集合是否为空:

booleanisEmpty()

截取部分集合:

ListsubList(intfromIndex,inttoIndex),List接口扩充

查找指定的对象是否存在:

intindexOf(Objecto),如果查找到则返回位置,否则返回-1

查找是否存在:

booleancontains(Objecto)

importjava.util.ArrayList;

importjava.util.List;

publicclassArrayListDemo05{

publicstaticvoidmain(Stringargs[]){

ListallList=null;

allList=newArrayList();//指定操作的泛型为String

System.out.println("集合操作前是否为空?

"+allList.isEmpty());

allList.add("Hello");//此方法由Collection接口而来

allList.add(0,"World");//在第一个位置上添加新的内容

allList.add("MLDN");//向Collection中加入内容

allList.add("");

System.out.println(allList.contains("Hello")?

"\"Hello\"字符串存在!

":

"\"Hello\"字符串不存在!

");

ListallSub=allList.subList(2,3);//字符串截取

System.out.println("集合截取:

");

for(inti=0;i

System.out.print(allSub.get(i)+"、");

}

System.out.println("MLDN字符串的位置:

"+allList.indexOf("MLDN"));

System.out.println("集合操作后是否为空?

"+allList.isEmpty());

}

};

以上的操作都是使用ArrayList子类完成的。

挽救的子类:

Vector

在List接口中还有一个子类:

Vector,Vector类属于一个挽救的子类,从整个Java的集合发展历史来看,Vector算是一个元老级的类,在JDK1.0的时候就已经存在此类了。

但是到了Java2(JDK1.2)之后重点强调了集合框架的概念,所以行后定义了很多的新接口(如:

List等),但是考虑到一大部分的人已经习惯了使用Vector类,所以Java的设计者,就是Vector类多实现了一个List接口,这才将其保留下来。

但是因为其是List子类,所以Vector类的使用与之前的并没有太大的区别。

Vector类的定义:

publicclassvectorextendsAbstractListimplementsList,RandomAccess,Cloneable,Serializalbe

虽然Vector类是旧的类,但是因为让其实现了List的接口,所以对程序来讲是一样的。

importjava.util.Vector;

importjava.util.List;

publicclassVectorDemo01{

publicstaticvoidmain(Stringargs[]){

ListallList=null;

allList=newVector();//指定操作的泛型为String

allList.add("Hello");//此方法由Collection接口而来

allList.add("Hello");//此方法由Collection接口而来

allList.add(0,"World");//在第一个位置上添加新的内容

allList.add("MLDN");//向Collection中加入内容

allList.add("");

for(inti=0;i

System.out.print(allList.get(i)+"、");

}

}

};

因为Vector类本身属于旧的类,所以在类中也提供了很多重复的方法。

增加元素:

publicvoidaddElement(Eobj)—>此方法是最早的增加元素的操作,之后此方法的功能与add()方法是一致的。

importjava.util.Vector;

importjava.util.List;

publicclassVectorDemo02{

publicstaticvoidmain(Stringargs[]){

VectorallList=null;

allList=newVector();//指定操作的泛型为String

allList.addElement("Hello");//此方法由Collection接口而来

allList.addElement("MLDN");//向Collection中加入内容

allList.addElement("");

for(inti=0;i

System.out.print(allList.get(i)+"、");

}

}

};

子类的差异:

ArrayList与Vector的区别

No.

比较点

ArrayList

Vector

1

推出时间

Jdk1.2之后推出的,属于新的操作类

JDK1.0时推出,属于旧的操作类

2

性能

采用异步处理方式,性能更高

采用同步处理方式,性能较低

3

线程安全

属于非线程安全的操作类

属于线程安全的操作类

4

输出

只能使用Iterator、foreach输出

可以使用Iterator、foreach、Enumeration输出

2.3、总结

1、掌握了以上的操作方法,实际上List接口的作用就明白了,而且之后的全部类集操作中也基本上都是以这些方法为操作的标准,只是各个的特性不一样,例如:

List中允许有重复元素。

2、ArrayList和Vector类的区别

3、LinkedList类

3.1、本章目标

⏹掌握LinkList与List接口的关系

⏹掌握Queue接口的作用

3.2、具体内容

Queue方法摘要

 boolean

a

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

当前位置:首页 > PPT模板 > 艺术创意

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

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