集合与异常处理_第1页
集合与异常处理_第2页
集合与异常处理_第3页
集合与异常处理_第4页
集合与异常处理_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于集合和异常处理第一张,PPT共六十七页,创作于2022年6月集合注意:不是所有的集合类都是从Collection继承第二张,PPT共六十七页,创作于2022年6月集合接口(Conllection接口)第三张,PPT共六十七页,创作于2022年6月集合接口(Map接口)第四张,PPT共六十七页,创作于2022年6月集合框架第五张,PPT共六十七页,创作于2022年6月集合有三种类型List:事物列表Set: 唯一的事物列表Map 具有唯一ID的事物第六张,PPT共六十七页,创作于2022年6月List接口下的几个实现类ArrayList:一个可增长的数组,提供快速遍历和快速随机访问,当需要快

2、速遍历时而不是做大量删除和插入时,用ArrayListVector(Hashtable)为了线程安全,Vector方法被同步,通常使用ArrayList 而不用Vector。ArrayList和Vector是唯一的两个设计了RadomAccess方法类第七张,PPT共六十七页,创作于2022年6月Set接口下的几个实现类Set接口:重在数据的唯一性,不允许重复,set接口通过equals()方法确定两个对象是否相等,重复时只能有一个放在set中。Set的三种实现类HashSet:未排序、未分类的集合,不能重复插入值,不关心数据顺序时使用LinkedHashSet:一个排序,但未分类的集合,在元

3、素之间使用一个双向链表来连接,当关心遍历顺序时使用LinkedHashSet,它将按插入的顺序进行遍历,当使用HashSet时遍历的顺序是不可预知的。TreeSet:按照一种二叉树的结构进行存储,并可以保证遍历时,会按照元素的自然顺序进行排序。也可以自己构造一个TreeSet,让其按照自己的想法进行排序第八张,PPT共六十七页,创作于2022年6月Map接口下的实现类Map接口: 按 “键值”对进行插入,(键、值都是对象)可以按照键来搜索值对象可以查找值的集合,也可以查找键的集合HashMap:一种未分类,未排序的映射类,不需要顺序时HashMap是一种最好的选择,因为其效率较高,HashMa

4、p允许集合中有一个null键和多个null值。Hashtable:Hashtable 是HashMap的同步版本,但Hashtable不允许有任何的null存在。LinkedHashMap:和linkedHashSet一样,LinkedHashMap维护插入和访问的顺序,添加和删除比HashMap慢,但遍历的速度要更快。TreeMap:一个顺序的Map集合。第九张,PPT共六十七页,创作于2022年6月集合函数集合的定义;-是将多个元素组成一个单元的对象.作用:-集合用于存储、检索和操作数据,以己将数据从一个方法传输至另一个方法。经常使用到的java.util包中的:ArrayList、Lin

5、kdList,、HashMap、Vector、List和Map等类和接口。第十张,PPT共六十七页,创作于2022年6月ArrayList类的概念ArrayList对象:是长度可变的对象引用数组,用于创建动态数组。它扩展AbstractList并实现List接口。三个之间的比较:List是有序的集合,可以包含重复的元素。AbstractList类实现List接口,有助随机方式访问元素。ArrayList在访问和遍历对象时,性能优。第十一张,PPT共六十七页,创作于2022年6月ArrayList类java.lang.Object java.util.AbstractCollection jav

6、a.util.AbstractList java.util.ArrayList 第十二张,PPT共六十七页,创作于2022年6月ArrayList特性ArrayList支持按照需要增长的动态数组。在java中,标准数组是固定长度的,数组创建以后,不能增长或者收宿。而arrarylist可以动态增减大小,数组列表初始长度超过时,集合自动增长;当删除时,集合自动变小。第十三张,PPT共六十七页,创作于2022年6月ArrayList类优点每个 ArrayList 实例都有一个容量。 该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量

7、也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。第十四张,PPT共六十七页,创作于2022年6月ArrayList类构造方法构造方法:ArrayList() 构造一个初始容量为 10 的空列表。ArrayList(Collectionc) 构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。ArrayList(intinitialCapacity) 构造一个具有指定初始容量的空列表。第十五张,PPT共六十七页,创作于2022年6月ArrayList类常用方法常用方法:boolean

8、add(Ee) 将指定的元素添加到此列表的尾部。void add(intindex, Eelement) 将指定的元素插入此列表中的指定位置。Void clear() 移除此列表中的所有元素。void trimToSize() 将此 ArrayList 实例的容量调整为列表的当前大小。E set(intindex, Eelement) 用指定的元素替代此列表中指定位置上的元素。 第十六张,PPT共六十七页,创作于2022年6月ArrayList类常用方法boolean remove(intindex) 移除此列表中指定位置上的元素。boolean remove(Objecto) 移除此列表中首

9、次出现的指定元素(如果存在)。int size() 返回此列表中的元素数Boolean isEmpty() 如果此列表中没有元素,则返回 true E get(intindex) 返回此列表中指定位置上的元素。void ensureCapacity(intminCapacity) 如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。第十七张,PPT共六十七页,创作于2022年6月ArraryList示例:ArrayList ls=new ArrayList();ls.add(a);ls.add(b);ls.add(c);ls.add(d);ls.a

10、dd(2,4);ls.get(2);ls.trimToSize();ls.set(1, haocai);ls.ensureCapacity(6);ls.isEmpty();ls.removeAll(ls);/removeRange(1,3);ls.remove(3);ls.clear();System.out.println(ls.get(4); System.out.println(ls.isEmpty();System.out.println( ls);第十八张,PPT共六十七页,创作于2022年6月ArrayList类ArrayList ls=new ArrayList();t3 b=n

11、ew t3();ls.add(C);ls.add(F);ls.add(E);ls.add(D);ls.add(b);ls.remove(4);System.out.println(ls.size();System.out.println(ls);第十九张,PPT共六十七页,创作于2022年6月Vector类java.util 类 Vectorjava.lang.Object java.util.AbstractCollection java.util.AbstractList java.util.Vector 第二十张,PPT共六十七页,创作于2022年6月Vector类Vector 类可以实

12、现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。第二十一张,PPT共六十七页,创作于2022年6月Vector类常用的方法void addElement(Eobj) 将指定的组件添加到此向量的末尾,将其大小增加 1。void insertElementAt(Eobj, intindex) 将指定对象作为此向量中的组件插入到指定的 index 处。E elementAt(intindex) 返回指定索引处的组件。boolean contains(Objecto) 如果此向量

13、包含指定的元素,则返回 true。String toString() 返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。第二十二张,PPT共六十七页,创作于2022年6月Vector类常用的方法E set(intindex, Eelement) 用指定的元素替换此向量中指定位置处的元素。E remove(intindex) 移除此向量中指定位置的元素。int indexOf(Objecto) 返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回 -1。第二十三张,PPT共六十七页,创作于2022年6月Vector类常用的方法E set(intindex,

14、 Eelement) 用指定的元素替换此向量中指定位置处的元素。E remove(intindex) 移除此向量中指定位置的元素。int indexOf(Objecto) 返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回 -1。第二十四张,PPT共六十七页,创作于2022年6月Enumeration类Enumeration 是一个接口类,它提供了一种访问各种数据结构中的所有数据抽象机制,就是我们要访问各种数据结构中的所有元素时,都可以使用同样方式,调用同样的方法。实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。第二十五张,PPT共六十七页,创作于

15、2022年6月Enumeration类boolean hasMoreElements() 测试此枚举是否包含更多的元素。空是返回false,则ture;EnextElement() 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素,取出保存对象。第二十六张,PPT共六十七页,创作于2022年6月Enumeration类示例Vector v=new Vector();v.addElement(“a”);v.addElement(“b”);第二十七张,PPT共六十七页,创作于2022年6月Iterator迭代器集合通常,有许多情况需要遍历集合中的元素,例如显示集合中的每一个元素。一

16、种遍历方法是使用迭代器(iterator),它是实现iterator或者ListIterator接口的一个对象。使用迭代器能够在集合中遍历以获得或者删除元素.第二十八张,PPT共六十七页,创作于2022年6月Iterator迭代器对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同: 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。 方法名称得到了改进。第二十九张,PPT共六十七页,创作于2022年6月Iterator迭代器的方法方法:b

17、oolean hasNext() 如果仍有元素可以迭代,则返回 true。E next() 返回迭代的下一个元素。void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。第三十张,PPT共六十七页,创作于2022年6月Iterator 常用类演示/数组迭代Iterator itr = al.iterator();/如果仍有元素可以迭代,则返回 true/循环while (itr.hasNext() /对象,返回迭代的下一个元素。Object element = itr.next();/打印System.out.print(element);

18、第三十一张,PPT共六十七页,创作于2022年6月HashSet类java.util 类 HashSetjava.lang.Object java.util.AbstractCollection java.util.AbstractSet java.util.HashSet 此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。 第三十二张,PPT共六十七页,创作于2022年6月HashSet类方法int size() 返回此 set 中的元素的数量(set 的容量)。boolean

19、 add(Ee) 如果此 set 中尚未包含指定元素,则添加指定元素。void clear() 从此 set 中移除所有元素。Boolean isEmpty() 如果此 set 不包含任何元素,则返回 true。第三十三张,PPT共六十七页,创作于2022年6月HashSet类方法示例 HashSet hs=new HashSet(); hs.add(ok); hs.remove(ok); System.out.print( hs.size(); System.out.print(hs);第三十四张,PPT共六十七页,创作于2022年6月Hashtable类java.util 类 Hashta

20、blejava.lang.Object java.util.Dictionary java.util.Hashtable 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。第三十五张,PPT共六十七页,创作于2022年6月Hashtable类如果很多条目要存储在一个 Hashtable 中,那么与根据需要执行自动 rehashing 操作来增大表的容量的做法相比,使用足够大的初始容量创建哈希表或许可以更有效地插入条目。初始容量主要控制空间消耗与执行 rehash 操作所需要的时间损耗之间的平衡。如果初始容量大于 Hashtable 所包含的最大条目数除以加

21、载因子,则永远 不会发生 rehash 操作。但是,将初始容量设置太高可能会浪费空间。第三十六张,PPT共六十七页,创作于2022年6月 Hashtable类方法V put(Kkey, Vvalue) 将指定 key 映射到此哈希表中的指定 value。Enumerationkeys() 返回此哈希表中的键的枚举。int size() 返回此哈希表中的键的数量。String toString() 返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 , (逗号加空格)分隔开的、括在括号中的一组条目。 Object.hashCode() 返回一个叫闪列码的值。第三十七张,

22、PPT共六十七页,创作于2022年6月Hashtable类方法实例 Hashtable ht=new Hashtable(); ht.put(okok, new Double(12.33); System.out.print(ht); 第三十八张,PPT共六十七页,创作于2022年6月properties类Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。 因为 Properties 继承于

23、Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。相反,应该使用 setProperty 方法。如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败。 第三十九张,PPT共六十七页,创作于2022年6月properties类void

24、load(Readerreader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。void store(OutputStreamout, Stringcomments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。第四十张,PPT共六十七页,创作于2022年6月properties类方法演示Properties sets=new Properties(); try sets.store(new FileOutputStream(d:a.txt),This Pr

25、ogram is used:); sets.put(saa, new Integer(3421); System.out.print(sets); catch(Exception e) e.printStackTrace(); 第四十一张,PPT共六十七页,创作于2022年6月什么是异常?异常类通常用来定义程序所遇到的轻微异外。可以写代码来处理异常并继续程序执行,而不是让程序中断。例如:发生下列情况时,会出现异常:想打开的文件不存在网络连接中断受控操作数超出预定范围非常感兴趣地正在装载的类文件丢失第四十二张,PPT共六十七页,创作于2022年6月7.4 异常关系图第四十三张,PPT共六十七页,

26、创作于2022年6月异常机制有什么作用?在程序中发生错误时,发现错误的方法能抛出一个异常到其调用程序。然后,调用方法捕获该异常,以一定的方法处理异常并继续程序执行。这个方案给程序员一个写处理程序的选择,来处理异常。它为系统和用户之间提供了一种友好的交互方式。第四十四张,PPT共六十七页,创作于2022年6月异常分类第四十五张,PPT共六十七页,创作于2022年6月实例 /HelloWorld 程序版本的简单扩展public class HelloWorld public static void main (String args) int i = 0; String greetings = H

27、ello world!, No, I mean it!,HELLO WORLD!; while (i 4) System.out.println (greetingsi); i+; 第四十六张,PPT共六十七页,创作于2022年6月Error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。RuntimeException表示一种设计或实现问题,即如果程序运行正常,从不会发生的情况(比如刚才的数组越界)。 IOException表示输入输出过程中出现的异常分类说明第四十七张,PPT共六十七页,创作于2022年6月运行结果编译执行,输出结果如下:

28、Hello world! No, I mean it!HELLO WORLD! java.lang.ArrayIndexOutOfBoundsException: at HelloWorld.main(HelloWorld.java:12) 原因: 当i = 3是,按照循环中的规定,要输出的greetings3不存在,超出了数组的边界,因而产生异常。第四十八张,PPT共六十七页,创作于2022年6月异常处理 Java编程语言提供了一个来考虑哪个异常被抛出以及如何来恢复它的机制。try和catch语句调用栈机制 finally语句 重访前例 第四十九张,PPT共六十七页,创作于2022年6月tr

29、y和catch语句try / 可能抛出异常的代码段; catch (MyExceptionType e) /处理一个特殊的异常; catch (Exception e) / 处理一个普通的异常; 将能够抛出异常的代码放入try块中,然后创建相应的catch块的列表。如果生成的异常与catch中提到的相匹配,catch条件的块语句就被执行。在try块之后,可能有许多catch块,每一个都处理不同的异常。一定要将特殊的异常写在前面。第五十张,PPT共六十七页,创作于2022年6月调用栈机制 如果方法中的一个语句抛出一个没有在相应的try/catch块中处理的异常,那么这个异常就被抛出到调用方法中。

30、如果异常也没有在调用方法中被处理,它就被抛出到该方法的调用程序。这个过程要一直延续到异常被处理。如果一直到main()中仍没有被处理,那么该异常就中断程序的执行。 第五十一张,PPT共六十七页,创作于2022年6月main() 上抛异常first() 上抛异常second() 总经理 (问题解决不了)部门经理 (问题解决不了)办事员一个事例对照第五十二张,PPT共六十七页,创作于2022年6月finally语句 try /可能出现异常的代码段;finally /总是执行的代码段; finally语句定义一个总是执行的代码块,而不考虑异常是否被捕获。即使try代码块和catch块中使用retur

31、n语句退出当前方法或break跳出某个循环,finally 代码块都要执行。Finally中的代码块不能被执行的唯一情况是:在被保护代码块中执行了System.exit(0)第五十三张,PPT共六十七页,创作于2022年6月/对前面一个HelloWorld程序的补充,加入了异常处理部分public class HelloWorld2 public static void main (String args) int i = 0; String greetings = Hello world!, No, I mean it!,HELLO WORLD! ; while (i 4) try Syst

32、em.out.println (greetingsi); catch (ArrayIndexOutOfBoundsException e) System.out.println( Re-setting Index Value); finally System.out.println(This is always printed); i+; 改进前面的例子 第五十四张,PPT共六十七页,创作于2022年6月 Hello world! This is always printed No, I mean it! This is always printed HELLO WORLD! This is

33、always printed Re-setting Index Value This is always printed 执行结果 第五十五张,PPT共六十七页,创作于2022年6月处理或声明规则 当一个方法出现问题时程序员可以采取以下两种措施: 通过将try和catch()块纳入其代码中,在这里捕获给被命名为属于某个超类的异常,并调用方法处理它。即使catch块是空的,这也算是处理情况。 让被调用的方法表示它将不处理异常,而且该异常将被抛回到它所遇到的调用方法中。它是通过throws关键字来声明的,其格式如下:public void troublesome() throws IOExcept

34、ion第五十六张,PPT共六十七页,创作于2022年6月Throws例子public class TestExceptionpublic static void main(String args)tryint reslut = new Test().devide( 3, 0 );System.out.println(the result is + reslut );catch(Exception e)System.out.println(e.getMessage();System.out.println(program is running here ,that is normal !);cl

35、ass Testpublic int devide(int x, int y) throws Exceptionint result = x/y;return x/y;第五十七张,PPT共六十七页,创作于2022年6月创建自己的异常 用户定义异常是通过扩展Exception类来创建的。它包含一个构造函数、几个变量以及方法;使用语句来抛出已经创建的异常:throw new MyException();第五十八张,PPT共六十七页,创作于2022年6月class IllegalValueException extends Exceptionclass UserTrial int val1,val2

36、; public UserTrial(int a,int b) val1=a; val2=b; void show() throws IllegalValueException if(val10) throw new IllegalValueException(); System.out.println(value 1=+val1); System.out.println(value 2=+val2); 第五十九张,PPT共六十七页,创作于2022年6月public class ThrowExample public static void main(String args) UserTrial values=new UserTrial(-1,1); try values.show(); catch(IllegalValueException e) /e.printStackTrace(); System.out.println(非法值); 第六十张,PPT共六十七页,创作于2022年6月实例 (定义一个叫MyException异常)public class MyException extends Exception private int num; /当前错误号 public static final int DATA_FORMATERR=100;/定义常量 public M

温馨提示

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

评论

0/150

提交评论