编写字符界面应用(中).ppt

上传人:牧羊曲112 文档编号:6333722 上传时间:2023-10-17 格式:PPT 页数:27 大小:250.99KB
返回 下载 相关 举报
编写字符界面应用(中).ppt_第1页
第1页 / 共27页
编写字符界面应用(中).ppt_第2页
第2页 / 共27页
编写字符界面应用(中).ppt_第3页
第3页 / 共27页
编写字符界面应用(中).ppt_第4页
第4页 / 共27页
编写字符界面应用(中).ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《编写字符界面应用(中).ppt》由会员分享,可在线阅读,更多相关《编写字符界面应用(中).ppt(27页珍藏版)》请在三一办公上搜索。

1、编写字符界面应用(中),ID:SCSJ001-Java Basic Syntax,集合框架体系结构,2023/10/17,Java集合类(下),3,Collection接口,Collection API提供“集合”的功能Collection API包含下述接口Colection:将一组对象以集合元素的形式组织到一起,在其子接口中分别实现不同的组织方式Set:Collection的子接口,不记录元素的保存顺序,且不允许有重复元素List:Collection的子接口,记录元素的保存顺序,且允许有重复元素,2023/10/17,Java集合类(下),4,Collections(集合)API,一个c

2、ollection(集合)是用一个对象来代表一组对象,其中的每个对象作为collection的一个元素。在Collection API中,代表对象集合的接口有:Collection 抽象的集合Set Collection的子接口,一个无序无重复集List Collection的子接口,一个有序可重复集,2023/10/17,Java集合类(下),5,Collection 层次结构,2023/10/17,Java集合类(下),6,数组列表ArrayList,在编程中常常会遇到需要动态操纵数组,比如在运行时增加和删除数组元素,而且有时在编译时又不想确定数组大小希望它可以动态伸缩,在java中解决这

3、一问题的方法是使用java.util包中的ArrayList类 ArrayList是List接口的一个可变长数组实现。,2023/10/17,Java集合类(下),7,数组列表ArrayList,public int size();/返回列表中的元素个数public Object get(int index);/返回指定位置的元素public void set(int index,Object obj);/设置指定位置元素public void add(Object obj);/在列表末尾增加元素public void add(int index,Object obj);/在列表指定位置插入元

4、素public void clear();/删除列表中所有元素public void remove(int index);/删除列表中指定位置元素元素public void contains(Object obj);/判断列表中指定对象是否存在,2023/10/17,Java集合类(下),8,ArrayList示例(ArrayListExample),public class ArrayListExample public static void main(String args)ArrayList al=new ArrayList();/Create a new ArrayListfor(i

5、nt i=0;i10;i+)al.add(new Integer(i);/Add Items to the array list for(int i=0;ial.size();i+)System.out.println(i+=+al.get(i);al.remove(5);al.set(5,new Integer(66);for(Iterator i=al.iterator();i.hasNext();)Integer integer=(Integer)i.next();System.out.println(integer);,2023/10/17,Java集合类(下),9,Set 接口(例:

6、SetTest),Set 接口继承 Collection 接口,而且它不允许集合中存在重复项,每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。,2023/10/17,Java集合类(下),10,Set 接口(例:SetTest),HashSet h=new HashSet();h.add(1st);h.add(2nd);h.add(new Integer(3);h.add(new Double(4.0);h.add(2nd);/重复元素,未被加入h.add(new Integer(

7、3);/重复元素,未被加入,2023/10/17,Java集合类(下),11,HashSet,HashSet扩展AbstractSet并且实现Set接口。它创建一个类集,该类集使用散列表进行存储。散列表通过使用称之为散列法的机制来存储信息。在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashcode)。而散列码被用来当做与关键字相连的数据的存储下标。关键字到其散列码的转换是自动执行的?你看不到散列码本身。你的程序代码也不能直接索引散列表。散列法的优点在于即使对于大的集合,它允许一些基本操作如add(),contains(),remove()和size()

8、方法的运行,时间保持不变。,2023/10/17,Java集合类(下),12,HashSet,HashSet()构造一个默认的散列集合HashSet(Collection c)用c中的元素初始化散列集合HashSet(int capacity)用capacity初始化散列集合的容量HashSet(int capacity,float fillRatio)第四种形式用它的参数初始化散列集合的容量和填充比(也称为加载容量)。填充比必须介于0.0与1.0之间,它决定在散列集合向上调整大小之前,有多少能被充满。具体的说,就是当元素的个数大于散列集合容量乘以它的填充比时,散列集合被扩大。对于没有获得填充

9、比的构造函数,默认使用0.75.,2023/10/17,Java集合类(下),13,HashSet(例:HashSetDemo),HashSet没有定义任何超过它的超类和接口提供的其他方法。重要的是,注意散列集合并没有确保其元素的顺序,因为散列法的处理通常不让自己参与创建排序集合。如果需要排序存储,另一种类集TreeSet将是一个更好的选择。下面是该程序的输出:A,F,E,D,C,B如上面解释的那样,元素并没有按顺序进行存储。,2023/10/17,Java集合类(下),14,Iterator接口,Iterator接口定义了对Collection类型对象中所含元素的遍历等增强处理功能可以通过C

10、ollection接口中定义的iterator()方法获得一个对应的Iterator(实现类)对象Set(实现类)对象对应的Iterator仍然是无序的List(实现类)对象对应的ListIterator对象可以实现对所含元素的双向遍历:使用next()方法和previous()方法,2023/10/17,Java集合类(下),15,Iterator接口层次,2023/10/17,Java集合类(下),16,Iterator接口,void add(Object obj)将obj插入列表中的一个元素之后,该元素在下一次调用next()方法时,被返回boolean hasNext()如果存在更多的

11、元素,则返回true,否则返回falseObject next()返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常void remove()删除当前元素,如果试图在调用next()方法之后,调用remove()方法,则引发IllegalStateException异常,2023/10/17,Java集合类(下),17,Iterator接口,hasPrevious()如果存在前一个元素,则返回true;否则返回falseint nextIndex()返回下一个元素的下标,如果不存在下一个元素,则返回列表的大小Object previous()返回前一个元

12、素,如果前一个元素不存在,则引发一个NoSuchElementException异常int previousIndex()返回前一个元素的下标,如果前一个元素不存在,则返回-1void set(Object obj)将obj赋给当前元素。这是上一次调用next()方法或previous()方法最后返回的元素,2023/10/17,Java集合类(下),18,Iterator接口(例:IteratorDemo),在通过迭代函数访问类集之前,必须得到一个迭代函数。每一个Collection类都提供一个iterator()函数,该函数返回一个对类集头的迭代函数。通过使用这个迭代函数对象,可以访问类集

13、中的每一个元素,一次一个元素。通常,使用迭代函数循环通过类集的内容,步骤如下:,2023/10/17,Java集合类(下),19,Iterator接口(例:IteratorDemo),1.通过调用类集的iterator()方法获得对类集头的迭代函数。2.建立一个调用hasNext()方法的循环,只要hasNext()返回true,就进行循环迭代。3.在循环内部,通过调用next()方法来得到每一个元素。对于执行List的类集,也可以通过调用ListIterator来获得迭代函数。正如上面解释的那样,列表迭代函数提供了前向或后向访问类集的能力,并可让你修改元素。否则,ListIterator如同

14、Iterator功能一样。,2023/10/17,Java集合类(下),20,Iterator接口,程序的输出如下所示:Original contents of al:C A E B D FModified contents of al:C+A+E+B+D+F+Modified list backwards:F+D+B+E+A+C+特别值得注意的是:列表是如何被反向显示的。在列表被修改之后,litr指向列表的末端(记住,当到达列表末端时,litr.hasNext()方法返回false)。为了以反向遍历列表,程序继续使用litr,但这一次,程序检测它是否有前一个元素。只要它有前一个元素,该元素就

15、被获得并被显示出来。,2023/10/17,Java集合类(下),21,映射(map),映射(map)是一个存储关键字和值的关联或者说是关键字/值对的对象。给定一个关键字,可以得到它的值。关键字和值都是对象。关键字必须是唯一的。但值是可以被复制的。有些映射可以接收null关键字和null值。而有的则不行。,2023/10/17,Java集合类(下),22,HashMap,HashMap类使用散列表实现Map接口。这允许一些基本操作如get()和put()的运行时间保持恒定,即便对大型集合,也是这样的。HashMap()构造一个默认的散列映射HashMap(Map m)用m的元素初始化散列映射H

16、ashMap(int capacity)将散列映射的容量初始化为capacityHashMap(int capacity,float fillRatio)用它的参数同时初始化散列映射的容量和填充比。容量和填充比的含义与前面介绍的HashSet中的容量和填充比相同。,2023/10/17,Java集合类(下),23,HashSet 和 HashMap,HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set。这里HashSet就是其实就是HashMap的一个视图。HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要Key和V

17、alue两个值。往hashset中插入对象其实只不过是内部做了public boolean add(Object o)return map.put(o,PRESENT)=null;HashMap为散列映射,它是基于hash table的一个实现,它可在常量时间内安插元素,或找出一组key-value pair.HashSet为散列集,它把查找时间看的很重要,其中所有元素必须要有hashCode(),2023/10/17,Java集合类(下),24,HashTable 与 HashMap,HashTable不允许null值(key和value都不可以),HashMap允许null值(key和va

18、lue都可以)。HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。HashTable使用Enumeration,HashMap使用Iterator。,2023/10/17,Java集合类(下),25,泛型 编译类型,public interface Set extends Collectionpublic interface List extends Coll

19、ectionpublic class ArrayListextends AbstractList implements List,RandomAccess,Cloneable,Serializablepublic interface Map public class HashMap extends AbstractMap implements Map,Cloneable,Serializable,2023/10/17,Java集合类(下),26,掌握重点,Java数组有什么特点数组列表和数组有什么不同Collection接口及其实现类HashMap,HashSet,HashTable,2023/10/17,Java集合类(下),27,课后练习,遍历一个文件夹,将文件夹下所有的文件,目录,以及子目录下的文件,目录找出,并存储在List中.(提示:用递归算法)将某班所有的学生对象保存到List中,并遍历打印输出;将某班所有的学生对象保存到Map中,并遍历打印输出;将某班所有的学生对象保存到Map中,按名字取出学生对象.将JDK系统的属性按key,value保存到一个Hashmap中;说明HashMap和HashTable的区别.,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号