MLDN 开发实战经典 第十三章 Java类集.docx
- 文档编号:29811773
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:71
- 大小:2.76MB
MLDN 开发实战经典 第十三章 Java类集.docx
《MLDN 开发实战经典 第十三章 Java类集.docx》由会员分享,可在线阅读,更多相关《MLDN 开发实战经典 第十三章 Java类集.docx(71页珍藏版)》请在冰豆网上搜索。
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接口定义:
◆publicinterfaceCollection
⏹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中所有元素的数组。
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[]){
List
allList=newArrayList
allList.add(“Hello”);//此方法由Collection接口而来
allList.add(“World”);//默认情况下向最后加入
System.out.println(allList);
}
};
指定位置上添加一组数据,添加的方法是List接口扩充的方法
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Collection;
publicclassArrayListDemo01{
publicstaticvoidmain(Stringargs[]){
List
Collection
allList=newArrayList
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[]){
List
allList=newArrayList
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[]){
List
allList=newArrayList
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[]){ List allList=newArrayList 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() 截取部分集合: List 查找指定的对象是否存在: intindexOf(Objecto),如果查找到则返回位置,否则返回-1 查找是否存在: booleancontains(Objecto) importjava.util.ArrayList; importjava.util.List; publicclassArrayListDemo05{ publicstaticvoidmain(Stringargs[]){ List allList=newArrayList 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\"字符串不存在! "); List 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类的定义: publicclassvector 虽然Vector类是旧的类,但是因为让其实现了List的接口,所以对程序来讲是一样的。 importjava.util.Vector; importjava.util.List; publicclassVectorDemo01{ publicstaticvoidmain(Stringargs[]){ List allList=newVector 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[]){ Vector allList=newVector 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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MLDN 开发实战经典 第十三章 Java类集 开发 实战 经典 第十三 Java 类集