《常用类和接口》PPT课件.ppt

上传人:za****8 文档编号:20690636 上传时间:2021-04-14 格式:PPT 页数:71 大小:806KB
收藏 版权申诉 举报 下载
《常用类和接口》PPT课件.ppt_第1页
第1页 / 共71页
《常用类和接口》PPT课件.ppt_第2页
第2页 / 共71页
《常用类和接口》PPT课件.ppt_第3页
第3页 / 共71页
资源描述:

《《常用类和接口》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《常用类和接口》PPT课件.ppt(71页珍藏版)》请在装配图网上搜索。

1、第5章 Java常用类和接口,主讲人:,5.1字符串处理类,在Java中,字符串是作为内置对象进行处理的,在java.lang包中,有两个专门的类用来处理字符串,分别是String和StringBuffer,本节重点介绍这两个类的用法。,5.1.1 String类,String类表示了定长、不可变的字符序列,Java程序中所有的字符串常量(如“abc”)都作为此类的实例来实现。它的特点是一旦赋值,便不能改变其指向的字符串对象,如果更改,则会指向一个新的字符串对象。下面介绍String中常用的一些方法。,5.1.1 String类,1、构造方法 String() String(bytebytes

2、) String(byte ascii,int hibyte) String(byte bytes,int offset,int length) String(byte ascii,int hibyte,int offset,int count) String(bytebytes,int offset,int length,String charsetName) String(byte bytes,String charsetName) String(char value) String(char value,int offset,int count) String(int codePoint

3、s,int offset,int count) String(String original) String(StringBuffer buffer) String(StringBuilder builder),5.1.1 String类,例【5-1】使用字符数组创建一个字符串对象,然后再使用创建好的字符串对象创建另一个字符串对象 class CloneString public static void main(String args) char c=H,e,l,l,o; String str1=new String(c); String str2=new String(str1); Sys

4、tem.out.println(str1); System.out.println(str2); ,5.1.1 String类,2、length()方法 字符串的长度是指其所包含的字符的个数,调用String的length() 方法可以得到这个值。 3、字符串连接 “+”运算符可以连接两个字符串,产生一个String对象。也允许使用一连串的“+”运算符,把多个字符串对象连接成一个字符串对象。,5.1.1 String类,【例5-2】定义一个图书类,包含图书的名称、作者以及出版社信息,并能返回相关信息。 public class BookDetails final String name=Jav

5、a程序设计; final String author=张三; final String publisher=科学出版社; public static void main(String args) BookDetails oneBookDetail =new BookDetails(); System.out.println(the book datail:+ oneBookDetail .name + - + oneBookDetail.author + - + oneBookDetail. publisher); ,5.1.1 String类,4、charAt()方法 此方法的形式: cha

6、r charAt(int where) 其中,where是想要得到的字符的下标,并且其值必须为非负的,它指定了在字符串中的位置。 5、 getChars()方法 此方法的形式: Void getChars(int sourceStart,int sourceEnd,char targte,int targetStart) 其中, sourceStart表示子字符串的开始位置,sourceEnd是子字符串结束的下一个字符的位置,因此截取的子字符串包含了从sourceStart到sourceEnd-1的字符,字符串存放在字符数组target中从targetStart开始的位置,在此必须确保targ

7、et应该足够大能容纳所截取的子串。,5.1.1 String类,【例5-3】从一个字符串对象中的指定位置截取指定长度的子串放到一个字符数组中。 public class GetCharsDemo public static void main(String args) String s=hello world; int start=6; int end=11; char buf=new charend-start; /定义一个长度为end-start的字符数组 s.getChars(start, end, buf, 0); System.out.println(buf); ,5.1.1 Str

8、ing类,6、 getBytes()方法 此方法使用平台的默认字符集将此字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。也可以使用指定的字符集对字符串进行编码,把结果存到字节数组中,String类中提供了getBytes()的多个重载方法。,5.1.1 String类,7、 字符串的比较 (1) equals()和equalsIgnoreCase()方法 前者比较两个字符串的时候对字母大小写是敏感的,而后者不区分字母大小写。 (2) startsWith()和endsWith()方法 startsWith()方法判断一个给定的字符串是否从一个指定的字符串开始,而ends

9、With()方法判断字符串是否以一个指定的字符串结尾。 (3) equals()与=的区别 equals()方法比较字符串对象中的字符是否相等,而=运算符则比较两个对象引用是否指向同一个对象 (4) compareTo()方法 比较两个字符串的大小关系(按字母在字典中出现的先后顺序)。,5.1.1 String类,【例5-4】使用equals()和equalsIgnoreCase()判断两个字符串的内容是否相等。 public class EqualDemo public static void main(String args) String s1=hello; String s2=hell

10、o; String s3=Good-bye; String s4=HELLO; System.out.println(s1+ equals +s2+-+s1.equals(s2); System.out.println(s1+ equals +s3+-+s1.equals(s3); System.out.println(s1+ equals +s4+-+s1.equals(s4); System.out.println(s1+ equalsIgnoreCase +s4+-+s1.equalsIgnoreCase(s4); ,5.1.1 String类,【例5-5】使用equal和“=”判断两个

11、对象的关系。 public class EqualsDemo public static void main(String args) String s1=book; String s2=new String(s1); String s3=s1; System.out.println(s1 equals s2-+s1.equals(s2); System.out.println(s1 = s2-+(s1=s2); System.out.println(s1 = s3-+(s1=s3); ,5.1.1 String类,8、 字符串的搜索 (1) indexOf()方法 indexOf方法有4种形

12、式,分别如下: int indexOf(int ch) int indexOf(int ch,int fromIndex) int indexOf(String str) int indexOf(String str,int fromlndex) (2 lastlndexOf()方法 lastlndexOf方法也有4种形式,分别如下。 int lastIndexOf(int ch) int lastIndexOf(int ch,int fromIndex) int lastIndexOf(String str) int lastlndexOf(String str,int fromlndex)

13、,5.1.1 String类,9、字符串修改 字符串的修改包括取字符串中的子串、字符串之间的连接、替换字符串中的某字符、消除字符串的空格等功能。在String类中有相应的方法来提供 这些功能: String substring(int startIndex) String substring(int startIndex,int endlndex) String concat(String str) String replace(char original,char replacement) String replace(CharSequence target,CharSequence reD

14、lacen String trim(),5.1.1 String类,10、 ValueOf()方法 valueOf()方法是定义在String类内部的静态方法,利用这个方法,可以将几乎所有的Java简单数据类型转换为String类型。这个方法是String类型和其他Java简单类型之间的一座转换桥梁。除了把Java中的简单类型转换为字符串之外,valueOf方法还可以把Object类和字符数组转换为字符串。 valueOf()的通用形式如下,总共有9种形式。 static String valueOf(boolean b) static String valueOf(char c) stati

15、c String valueOf(chardata) static String valueOf(chardata,int offset,int count) static String valueOf(double d) static String valueOf(float f) static String valueOf(int i) static String valueOf(1ong 1) static String valueOf(Object obj),5.1.1 String类,11、 toString()方法 toString()方法是在Object中定义,所以任何类都具有这

16、个方法。然而toString()方法的默认实现是不够的,对于用户所创建的大多数类,通常都希望用自己提供的字符串表达式重载toString()方法。toString()方法的一般形式:String toString()。实现toString()方法,仅仅返回一个String对象,该对象包含描述类中对象的可读的字符串。通过对所创建类的toString()方法的覆盖,允许得到的字符串完全继承到Java的程序设计环境中。例如它们可以被用于print()和println()语句以及连接表达式中。,5.1.1 String类,【例5-6 】定义一个Person类,覆盖Object的toString()方法

17、,再定义一个测试类,输出Person的信息。 public class Person String name; int age; Person(String n,int a) this.name=n; this.age=a; public String toString() /覆盖超类的toString()方法,返回自己的字符串对象 return 姓名是+name+,年龄是+age+岁; class PersonDemo public static void main(String args) Person p=new Person(王冷晗,30); System.out.println(p)

18、; ,5.1.2 StringBuffer类,在实际应用中,经常会遇到对字符串进行动态修改,这时String类的功能就受到了限制,而StringBuffer类可以完成字符串的动态添加、插入和替换等操作。StringBuffer表示变长的和可写的字符序StringBuffer类可有插入其中或追加其后的字符或子字符串,还可以针对这些添加自动地增加空间,同时它通常还有比实际需要更多的预留字符,从而允许增加空间。,5.1.2 StringBuffer类,1StringBuffer的构造方法 StringBuffer定义了四个构造方法: StringBuffer() StringBuffer(int c

19、apacity) StringBuffer(String str) StringBuffer(CharSequence seq),5.1.2 StringBuffer类,2append()方法 可以向已经存在的StringBuffer对象追加任何类型的数据,StringBuffer类提供了相应 append()方法,如下所示: StringBuffer append(boolean b) StringBuffer append(char c) StringBuffer append(charstr) StringBuffer append(charstr,int offset,int fen)

20、 StringBuffer append(CharSequence s) StringBuffer append(CharSequence s,int start,int end) StringBuffer append(double d) StringBuffer append(float f) StringBuffer append(int i) StringBuffer append(10ng lng) StringBuffer append(Object obj) StringBuffer append(String str) StringBuffer append(StringBuf

21、fer sb),5.1.2 StringBuffer类,3length()和capacity()方法 对于每一个StringBuffer对象来说,有两个很重要的属性,分别是长度和容量。通过调用length()方法可以得到当前StringBuffer的长度,而通过调用capacity()方法可以得到总的分配容量。它们的一般 形式如下: int length() int capacity(),5.1.2 StringBuffer类,4ensureCapacity()和setLength()方法 如果想在构造StringBuffer之后为某些字符预分配空间,可以使用ensureCapacity方法设

22、置追加缓冲区的大小,即在默认16个字符缓冲区大小的基础上,再追加若干个字符的缓冲区。这个方法是在事先已知要在StringBuffer上追加大量字符串的情况下是使用的。 ensureCapacity方法的一般形式如下: void ensureCapacity(int minimumCapacity) 参数minimumCapacity就是要在原来缓冲区的基础上追加的缓冲区大小。 使用setLength方法可以设置字符序列的长度。其一般形式如下: void setLength(int len) 这里len指定了新字符序列的长度,这个值必须是非负的。当增加缓冲区的大小时空字符将被加在现存缓冲区的后面

23、。如果用小于length方法返回的当前值的值调用setLength方法,那么在新长度之后存储的字符将被丢失。,5.1.2 StringBuffer类,5insert()方法 它是先调用String类的valueOf方法得到相应的字符串表达式。随后这个字符串被插入所调用 的StringBuffer对象中。insert方法有如下几种形式: StringBuffer insert(int offset,boo1ean b) StringBuffer insert(int offset,cbar c) StringBuffer insert(int offset,charstr) StringBuff

24、er insert(int index,charstr,int offset,int len) StringBuffer insert(int dstOffset,CharSequence s) StringBuffer insert(int dstOffset,CharSequence s,int start,int end) StringBuffer insert(int offset,double d) StringBuffer insert(int offset,float f) StringBuffer insert(int offset,int i) StringBuffer in

25、sert(int offset,long l) StringBuffer insert(int offset,Object obj) StringBuffer insert(int offset,String str),5.1.2 StringBuffer类,6reverse()方法 可以使用reverse()方法将StringBuffer对象内的字符串进行翻转,它的一般形式如下: StringBuffer reverse(),5.2 泛型,在Java SE 5中增加了泛型机制,其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。“泛型”这个术语的意思是:“适用于许多的类型

26、”。泛型实现了参数化类型的概念,使代码可以应用于多种类型。 可以使用class名称声明一个类,如: Class 类名 E是其中的泛型,并没有指定E是何种类型的数据,可以是任何对象或接口,但不能是基本类型数据。,5.2.1 泛型类,public class Pair private T first; private T second; public Pair()first=null; second=null; public Pair(T first,T second)this.first=first; this.second=second; public T getFirst()return f

27、irst; public T getSecond()return second; public void setFirst(T newValue)first=newValue; public void setSecond(T newValue)second=newValue; Pair类引入了一个类型变量T,用尖括号括起来,并放在类名的后面 。用具体的类型替换类型变量就可以实例化泛型类型,例如:Pair可以将结果想像成带有构造器的普通类。,5.2.1 泛型类,【例5-7】定义一个PairTest类,测试泛型类Pair的用法。 public class PairTest public stati

28、c void main(String args) Pair pair=new Pair(Hello,Java); System.out.println(first=+pair.getFirst(); System.out.println(second=+pair.getSecond(); ,5.2.2 泛型方法,前面已经介绍了如何定义一个泛型类。实际上,还可以定义一个带有参数类型的方法即泛型方法。泛型方法使得该方法能够独立于类而产生变化,泛型方法所在的类可以是泛型类,也可以不是泛型类。创建一个泛型方法常用的形式如下: 访问修饰符 static final 返回值 方法名( 形式参数列表 ),5

29、.2.2 泛型方法,【例5-8】创建一个GenericMethod类,在其中声明一个f ( )泛型方法,用于返回调用该方法时,所传入的参数类型的类名。 class GenericMethod public void f(T x) System.out.println(x.getClass().getName(); public class GenericMethodTest public static void main(String args) GenericMethod gm=new GenericMethod(); gm.f(); gm.f(1); gm.f(1.0f); gm.f(c)

30、; gm.f(gm); ,5.3 集合框架,在集合框架中有几个基本的集合接口,分别是Collection接口、List接口、Set接口和Map接口,它们所构成的层次关系如图所示。 (1)Collection接口是一组允许重复的对象。 (2)Set接口继承Collection,但不允许集合中出现重复元素。 (3)List接口继承Collection,允许集合中有重复,并引入位置索引。 (4)Map接口与Collection接口无任何关系,Map的典型应用是访问按关键字存储的值,所包含的是键值对,而不是单个独立的元素。,5.3.1 Collection接口及操作,Collection接口是所有集合

31、类型的根接口,它有三个子接口:Set接口、List接口和Queue接口。 Collection接口的定义如下: public interface Collection extends Iterable / 基本操作 int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); boolean remove(Object element); Iterator iterator(); / 批量操作 boolean containsAll(Collection c); boolean

32、addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); / 数组操作 Object toArray(); T toArray(T a); ,5.3.1 Collection接口及操作,1. 基本操作 实现基本操作的方法有size(),它返回集合中元素的个数;isEmpty()方法返回集合是否为空;contains()方法返回集合中是否包含指定的对象;add()方法和remove()方法实现向集合中添加元素和删除元素的功能;iterator()方法用

33、来返回Iterator对象。 2. 批量操作 实现批量操作的方法有containsAll(),它返回集合中是否包含指定集合中的所有元素;addAll()方法和removeAll()方法将指定集合中的元素添加到集合中和从集合中删除指定的集合元素;retainAll()方法删除集合中不属于指定集合中的元素;clear()方法删除集合中所有元素。 toArray()方法可以实现集合与数组的转换。该方法可以实现将集合元素转换成数组元素。无参数的toArray()方法实现将集合转换成Object类型的数组。有参数的toArray()方法将集合转换成指定类型的对象数组。 例如,假设c是一个Collecti

34、on对象,下面的代码将c中的对象转换成一个新的Object数组,数组的长度与集合c中的元素个数相同。 Object a = c.toArray(); 假设我们知道c中只包含String对象,可以使用下面代码将其转换成String数组,它的长度与c中元素个数相同: String a = c.toArray(new String0);,5.3.2 Set接口及其实现类,Set接口是Collection的子接口,Set接口对象类似于数学上的集合概念,其中不允许有重复的元素。Set接口没有定义新的方法,只包含从Collection接口继承的方法。Set接口有几个常用的实现类,它们的层次关系如图所示。

35、Set接口的常用的实现类有:HashSet类、TreeSet类和LinkedHashSet类。,5.3.2 Set接口及其实现类,1. HashSet类与LinkedHashSet类 HashSet类是抽象类AbstractSet的子类,它实现了Set接口, HashSet使用哈希方法存储元素,具有最好的性能,但元素没有顺序。 HashSet类的构造方法有: HashSet() 创建一个空的哈希集合,装填因子(load factor)是0.75。 HashSet(Collection c) 用指定的集合c的元素创建一个哈希集合。 HashSet(int initialCapacity) 创建一

36、个哈希集合,并指定的集合初始容 量。 HashSet(int initialCapacity, float loadFactor) 创建一个哈希集合, 并指定的集合初始容量和装填因子。 LinkedHashSet类是HashSet类的子类。该实现与HashSet的不同之处 是它对所有元素维护一个双向链表,该链表定义了元素的迭代顺序,这个 顺序是元素插入集合的顺序。,5.3.2 Set接口及其实现类,【例5-10】创建一个类HashSetDemo,测试HashSet类的用法。 import java.util.HashSet; public class HashSetDemo public st

37、atic void main(String args) boolean r; HashSet s=new HashSet(); r=s.add(Hello); System.out.println(添加单词Hello,返回为+r); r=s.add(Kitty); System.out.println(添加单词Kitty,返回为+r); r=s.add(Hello); System.out.println(添加单词Hello,返回为+r); r=s.add(java); System.out.println(添加单词java,返回为+r); for(String element:s) Syst

38、em.out.println(element); ,5.3.2 Set接口及其实现类,2. SortedSet接口与TreeSet类 SortedSet接口是有序对象的集合,其中的元素排序规则按照元素的自然顺序排列。为了能够使元素排序,要求插到SortedSet对象中的元素必须是相互可以比较的。 TreeSet是SortedSet接口的实现类,它使用红黑树为存储元素排序,它基于元素的值对元素排序,它的操作要比HashSet慢。 【例5-11】创建一个TreeSetDemo类,测试TreeSet的用法。 import java.util.TreeSet; public class TreeSet

39、Demo public static void main(String args) boolean r; TreeSet s=new TreeSet(); r=s.add(Hello); System.out.println(添加单词Hello,返回为+r); r=s.add(Kitty); System.out.println(添加单词Kitty,返回为+r); r=s.add(Hello); System.out.println(添加单词Hello,返回为+r); r=s.add(java); System.out.println(添加单词java,返回为+r); for(String e

40、lement:s) System.out.println(element); ,5.3.3 对象排序,默认情况下,集合中的元素是按自然顺序排列的,如果指定了比较器对象,集合中的元素是根据比较器的规则排序。所谓自然顺序(natural ordering)指的是集合中对象的类实现了Comparable接口,并实现其中的compareTo()方法,对象则根据该方法排序。如果希望集合中元素能够排序,必须使元素是可比较的,即要求元素所属的类必须实现Comparable接口。另一种排序方法是创建TreeSet对象时指定一个比较器对象,这样集合中的元素将按比较器的规则排序。,5.3.4 List接口及实现类

41、,List接口也是Collection接口的子接口,它实现一种顺序表的数据结构,有时也称为序列。存放在List中的所有元素都有一个下标(下标从0开始),可以通过下标访问List中的元素。List中可以包含重复元素。List接口及其实现类的层次结构如图所示。 List接口除了继承Collection的方法外,还定义了一些自己的方法。使用这些方法可以实现定位访问、查找、链式迭代和范围查看。,5.3.4 List接口及实现类,在集合框架中,实现了列表接口(List)的是ArrayList类和LinkedList类。这两个类定义在java.util包中。ArrayList类是通过数组方式来实现的,相当

42、于可变长度的数组。LinkedList类则是通过链表结构来实现。由于这两个类的实现方式不同,使得相关操作方法的代价也不同。一般说来,若对一个列表结构的开始和结束处有频繁地添加和删除操作时,一般选用LinkedList类所实例化的对象表示该列表。 1.ArrayList类 ArrayList是最常用的实现类,它是通过数组实现的集合对象 。ArrayList类实际上实现了一个变长的对象数组,其元素可 以动态地增加和删除。它的定位访问时间是常量时间。 ArrayList的构造方法如下: ArrayList() 创建一个空的数组列表对象。 ArrayList(Collection c) 用集合c中的元

43、素创建一个数组列表对象。 ArrayList(int initialCapacity) 创建一个空的数组列表对象,并指定初始容量。,5.3.4 List接口及实现类,【例5-14】创建一个ArrayListDemo类,在其中创建一个ArrayList集合,向其中添加元素,然后输出所有元素。 import java.util.ArrayList; public class ArrayListDemo public static void main(String args) ArrayList list=new ArrayList(); list.add(collection); list.add

44、(list); list.add(ArrayList); list.add(LinkedList); for(String s:list) System.out.println(s); list.set(3,ArrayList); int len=list.size(); for(int n=0;nlen;n+) System.out.println(list.get(n); ,5.3.4 List接口及实现类,2.LinkedList类 如果需要经常在List的头部添加元素,在List的内部删除元素,就应该考虑使用LinkedList。这些操作在LinkedList中是常量时间,在Array

45、List中是线性时间,但定位访问是LinkedList线性时间而在ArrayList中是常量时间。 LinkedList的构造方法如下: LinkedList() 创建一个空的链表。 LinkedList(Collection c) 用集合c中的元素创建一个链表。 通常利用LinkedList对象表示一个堆栈(stack)或队列(queue)。对此LinkedList类中特别定义了一些方法,而这是ArrayList类所不具备的。这些方法用于在列表的开始和结束处添加和删除元素,其方法定义如下: public void addFirst(E element):将指定元素插入此列表的开头。 publ

46、ic void addLast(E element):将指定元素添加到此列表的结尾。 public E removeFirst():移除并返回此列表的第一个元素。 public E removeLast():移除并返回此列表的最后一个元素。,5.3.4 List接口及实现类,【例5-15】创建类LinkedListDemo,在其中创建一个LinkedList集合,对其进行各种操作。 import java.util.LinkedList; public class LinkedListDemo public static void main(String args) LinkedList qu

47、eue=new LinkedList(); queue.addFirst(set); queue.addLast(HashSet); queue.addLast(TreeSet); queue.addFirst(List); queue.addLast(ArrayList); queue.addLast(LinkedList); queue.addLast(map); queue.addFirst(collection); System.out.println(queue); queue.removeLast(); queue.removeFirst(); System.out.println

48、(queue); ,5.3.5 Map接口极其实现类,Map是一个专门用来存储键/值对的对象。在Map中存储的关键字和值都必须是对象,并要求关键字是唯一的,而值可以有重复的。 Map接口常用的实现类有HashMap类、LinkedHashMap类、TreeMap类和Hashtable类,前三个类的行为和性能与前面讨论的Set实现类HashSet、LinkedHashSet及TreeSet类似。Hashtable类是Java早期版本提供的类,经过修改实现了Map接口。Map接口及实现类的层次关系如图所示:,5.3.5 Map接口极其实现类,Map定义在java.util包中,主要定义三类操作方法

49、:修改、查询和集合视图。 (1)修改操作向映射中添加和删除键值对 (2)查询操作是获得映射的内容 (3)集合视图允许将键、值或条目(“键-值”对)作为集合来处理 在Map接口中还包含一个Map.Entry接口,它是一个使用static定义的内部接口,所以就是一个外部接口。其方法描述如下: public V setValue(V value):用指定的值替换与此项对应的值。 public K getKey():返回与此项对应的键。 public V getValue():返回与此项对应的值。 public boolean equals(Object o):比较指定对象与此项的相等性。如果给定对象

50、也是一个映射项,并且两个项表示相同的映射关系,则返回 true。,5.3.5 Map接口极其实现类,2.Map接口的实现类 Map接口的常用的实现类有HashMap、TreeMap和Hashtable类。 (1)HashMap类与LinkedHashMap类 【例5-16】创建一个HashMap集合,向其中加入一些键值对,然后根据键对象获取值。并输出集合中所有键值对。 import java.util.HashMap; import java.util.Map; public class HashMapDemo public static void main(String args) Map

51、all = new HashMap(); all.put(BJ, BeiJing); all.put(NJ, NanJing); String value = all.get(BJ); / 根据key查询出value System.out.println(value); System.out.println(all.get(TJ); System.out.println(all); LinkedHashMap是HashMap类的子类,它保持键的顺序与插入的顺序一致,5.3.5 Map接口极其实现类,(2)TreeMap类 HashMap子类中的key都属于无序存放的,如果现在希望有序(按key

52、排序)则可以使用TreeMap类完成,但是需要注意的是,由于此类需要按照key进行排序,而且key本身也是对象,那么对象所在的类就必须实现Comparable接口。TreeMap类实现了SortedMap接口,SortedMap接口能保证各项按关键字升序排序。,5.3.5 Map接口极其实现类,【例5-17】创建TreeMap集合,向其中添加键值对,然后输出。 import java.util.Map; import java.util.TreeMap; public class TreeMapDemo public static void main(String args) Map all

53、= new TreeMap(); all.put(BJ, BeiJing); all.put(NJ, NanJing); String value = all.get(BJ); / 根据key查询出value System.out.println(value); System.out.println(all.get(TJ); System.out.println(all); ,5.3.5 Map接口极其实现类,(3)Hashtable Hashtable实现了一种哈希表,它是Java早期版本提供的一个存放键/值对的实现类,现在也属于集合框架。但哈希表对象是同步的,即是线程安全的。 任何非nul

54、l对象都可以作为哈希表的关键字和值。但是要求作为关键字的对象必须实现hashCode()方法和equals()方法,以使对象的比较成为可能。 一个Hashtable实例有两个参数影响它的性能:一个是初始容量(initial capacity),另一个是装填因子(load factor)。,5.3.5 Map接口极其实现类,Map对象与Hashtable对象的区别如下: (1)Map提供了集合查看方法而不直接支持通过枚举对象(Enumeration)的迭代。 集合查看大大地增强了接口的表达能力; (2)Map允许通过键、值或键/值对迭代,而Hashtable不支持第三种方法; (3)Map提供了

55、安全的方法在迭代中删除元素,而Hashtable不支持该功能。 (4)Map修复了Hashtable的一个小缺陷。在Hashtable中有一个contains()方法,当Hashtable包含给定的值,该方法返回true。该方法可能引起混淆,因此Map接口将该方法改为containsValue(),这与另一个方法containsKey()实现了一致。,5.3.6 集合的输出,1.迭代输出(Iterator) Iterator本身是一个专门用于输出的操作接口,其接口定义了三种方法: public boolean hasNext():如果仍有元素可以迭代,则返回 true。 public Obje

56、ct next():返回迭代的下一个元素。 public void remove():从迭代器指向的collection中移除迭代器返回的最后一个元素。 一般情况下,只要是遇到集合的输出问题,直接使用Iterator是最好的选择。在Collection接口中已经定义了iterator()方法,可以为Iterator接口进行实例化操作。,5.3.6 集合的输出,【例5-18】使用Iterator输出ArrayList中的全部元素。 import java.util.ArrayList; import java.util.Iterator; import java.util.List; publi

57、c class IteratorDemo public static void main(String args) List all = new ArrayList(); all.add(hello); all.add(world); Iterator iter = all.iterator(); while (iter.hasNext() / 指针向下移动,判断是否有内容 String str = iter.next(); System.out.print(str + 、); ,5.3.6 集合的输出,2.双向迭代输出(ListIterator) Iterator接口的主要的功能只能完成从前

58、向后的输出,而如果现在要想完成双向(由前向后、由后向前)则可以通过ListIterator接口完成功能,ListIterator是Iterator的子接口,除了本身继承的方法外,此接口又有如下两个重要方法: public boolean hasPrevious():判断是否有前一个元素。 public E previous():public ListIterator listIterator() 需要注意的是,如果要想进行由后向前的输出,必须先由前向后。但是在Collection接口中并没有为ListIterator接口实例化的操作,而在List接口中存在此方法: public ListIte

59、rator listIterator(),5.3.6 集合的输出,【例5-19】使用ListIterator双向输出List类型集合中的元素。 import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListIteratorDemo public static void main(String args) List all = new ArrayList(); all.add(hello); all.add(world); ListIterator iter =

60、 all.listIterator(); System.out.println(= 由前向后输出 =); while (iter.hasNext() System.out.print(iter.next() + 、); System.out.println(n= 由后向前输出 =); while (iter.hasPrevious() System.out.print(iter.previous() + 、); ,5.3.6 集合的输出,3.Map集合的输出 按照最正统的做法,所有的Map集合的内容都要依靠Iterator输出,以上虽然是完成了输出,但是完成的不标准。Map集合本身并不能直接为

61、Iterator实例化,如果此时非要使用Iterator输出Map集合中内容的话,则要采用如下的步骤: 将所有的Map集合通过entrySet()方法变成Set集合,里面的每一个元素都是Map.Entry的实例; 利用Set接口中提供的iterator()方法为Iterator接口实例化; 通过迭代,并且利用Map.Entry接口完成key与value的分离。,5.3.6 集合的输出,【例5-20】使用Iterator输出Map集合中的元素 import java.util.HashMap; import java.util.Iterator; import java.util.Map; im

62、port java.util.Set; public class MapOutput public static void main(String args) Map all = new HashMap(); all.put(BJ, BeiJing); all.put(NJ, NanJing); all.put(null, NULL); Set set = all.entrySet(); Iterator iter = set.iterator(); while (iter.hasNext() Map.Entry me = iter.next(); System.out.println(me.

63、getKey() + - + me.getValue(); ,5.3.7 集合的工具类Collections,从定义格式上看与Collection非常的类似,但是两者并没有任何的关系,此类定义如下: public class Collections extends Object 由此可以看出Collections是一个Object类的子类,跟Collection并没有任何关系。 Collections类只提供了一些静态方法,通过这些方法可以对集合对象进行操作或返回集合对象。 Collections类中对List对象(即实现List接口的集合类)提供查询、复制、填充、排序和乱序、倒置、交换等方法

64、。 Collections类中对Collection对象(即实现Collection接口的集合类)提供最大和最小值方法。 Collections类所提供的集合同步处理可针对Collection对象、List对象、Map对象和Set对象。 Collections类所提供的集合只读处理(不可更改)可针对Collection对象、List对象、Map对象和Set对象。 Collections类还可针对Set对象、List对象和Map对象建立不可更改的单子(singleton)集合,即集合中仅包含所指定的一个对象。,5.3.7 集合的工具类Collections,【例5-21】使用Collection

65、s对List集合对象进行操作。 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class CollectionsDemo public static void main(String args) List all = new ArrayList(); Collections.addAll(all, take, me, away); System.out.println(all); ,5.4 时间日期类,Java语言没有提供时间日期的简单数据类型,它采用类对象来处理时

66、间和日期。本节主要介绍几个常用的时间日期类,熟悉它们的使用方法,对我们进行程序开发会有很大的帮助。 1 Date常用的构造方法 public Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(longdate):分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。,5.4.1 Date类,Date常用的方法,5.4.2 Calendar,Calendar是一个抽象类,它提供了一组方法允许将以毫秒为单位的时间转换成一组有用的分量。Calendar没有公共的构造方法,要得到其引用,不能使用new,而要调用其静态方法getInstance得到一个Calendar对象,然后调用相应的对象方法。,Cale

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!