JAVA集合与泛型ppt课件

上传人:29 文档编号:240772741 上传时间:2024-05-06 格式:PPT 页数:52 大小:440.27KB
返回 下载 相关 举报
JAVA集合与泛型ppt课件_第1页
第1页 / 共52页
JAVA集合与泛型ppt课件_第2页
第2页 / 共52页
JAVA集合与泛型ppt课件_第3页
第3页 / 共52页
点击查看更多>>
资源描述
Java程序设计程序设计第9章集合类与泛型程序设计集合类与泛型程序设计釉功廓樊迁吹熙旱纳略拙忌腔性鸽锑疥葡土祸腆令况塌抗侦兴苏鬼卢惠侦JAVA集合与泛型JAVA集合与泛型5/6/20241第9章集合类与泛型程序设计釉功廓樊迁吹熙旱纳略拙忌腔性鸽锑疥Java程序设计程序设计9.1 Java中的集合类结构中的集合类结构 Java提供了集合类提供了集合类(Collection)及其及其API,于是用户可以通,于是用户可以通过统一的操作接口,使得从一种数据结构到另一种数据结构过统一的操作接口,使得从一种数据结构到另一种数据结构的转换极为方便,简化了程序员编程时的负担。的转换极为方便,简化了程序员编程时的负担。任何集合框架包括三部分内容:任何集合框架包括三部分内容:对外的接口对外的接口接口的实现接口的实现对集合运算的算法对集合运算的算法 集合集合API的根是一个集合接口,存放于的根是一个集合接口,存放于java.util包中。包中。Collection接口定义了所有属于集合的类都应该具有的通用方接口定义了所有属于集合的类都应该具有的通用方法。法。真逗癌甚褂定观挂疚旦砂蛆恕兢谢车冕货琅歪帝根旭跟吐证来疥刀洽藤产JAVA集合与泛型JAVA集合与泛型5/6/202429.1 Java中的集合类结构 Java提供Java程序设计程序设计 Java集合框架结构由两颗接口树构成:集合框架结构由两颗接口树构成:第一棵树根节点为第一棵树根节点为Collection接口接口,它定义了所有集合的,它定义了所有集合的基本操作,如添加、删除、遍历等。它的子接口基本操作,如添加、删除、遍历等。它的子接口Set、List等则提供了更加特殊的功能。等则提供了更加特殊的功能。第二棵树根节点为第二棵树根节点为Map接口接口。与哈希表类似,保持的是键。与哈希表类似,保持的是键值对的集合,可以通过键来实现对值元素的快速访问。值对的集合,可以通过键来实现对值元素的快速访问。葛疾陵界悟整毋盒烃争沦纵桓仲卖慕制闻鹤绦芋篓橇蹿裤沫刁泌逸映墟或JAVA集合与泛型JAVA集合与泛型5/6/20243 Java集合框架结构由两颗接口树构成:葛疾陵界悟整毋Java程序设计程序设计Collection接口聚澳镇巩蝗沧钓代德歌灸定盈跑诵睡秦铁界室履唁痒满霹菜庞命馒码劫玛JAVA集合与泛型JAVA集合与泛型5/6/20244Collection接口聚澳镇巩蝗沧钓代德歌灸定盈跑诵睡秦铁Java程序设计程序设计Map接口王籽矾饶肃箕攀过俗崇练去虫们候敷鸳左曾闻坚勿合拢讼磋你轿基潦蚀错JAVA集合与泛型JAVA集合与泛型5/6/20245Map接口王籽矾饶肃箕攀过俗崇练去虫们候敷鸳左曾闻坚勿合拢讼Java程序设计程序设计Collection:n每个元素都是单一对象。List以特定顺序容纳元素。Set中不能有重复的元素。Map:n每个元素都是一对key-value(键值实值)对象,且每个元素中的键值都不能与其他元素中的键值相同。韩滦府骤栽心卖缴坎堆班全灰蒜辟裔打强犊姨咽里奥睬鞍棒倒易寐羔粱徒JAVA集合与泛型JAVA集合与泛型5/6/20246Collection:韩滦府骤栽心卖缴坎堆班全灰蒜辟裔打强犊Java程序设计程序设计集合接口集合接口接口描述CollectionCollectionCollectionCollection能使你操作对象数组,它位于集合框架层次结构的顶层ListListListList扩展Collection,表示有序的,可包括重复元素的列表 SetSetSetSet扩展Collection,表示无序的,无重复元素的集合(数学上的含义)。SortedSetSortedSetSortedSetSortedSet扩展Set,对Set中元素进行排序 爽贺箕沪尖手宏躇录笋屈岂住央床罢态鄂惩础欲鞘墙戒夯汞球蹄魄腔段窄JAVA集合与泛型JAVA集合与泛型5/6/20247集合接口接口描述Collection能使你操作对象数组,它位Java程序设计程序设计9.2 Collection接口Collection接口是构造集合框架的基础。它声明所有集合类都将拥有的核心方法。包含下面几种类型的方法增加元素,清除元素,判断元素的存在返回迭代接口,把集合转换成数组集合的大小双噎刹妖粪周揩衡双棚竹逐朗结宇亚笆翁脸敞练昨渊继吊颧肢讽盯滩询绰JAVA集合与泛型JAVA集合与泛型5/6/202489.2 Collection接口Collection接口是构Java程序设计程序设计9.2 Collection接口方法名方法名功能说明功能说明boolean add(Object o)插入单个对象插入单个对象boolean addAll(Collection c)添加另外一个集合对象添加另外一个集合对象c中的所有对象中的所有对象Object toArray()以数组的形式返回内容以数组的形式返回内容Object toArray(Object a)以数组的形式返回内容以数组的形式返回内容Iterator iterator()返回一个实现了返回一个实现了Iterator接口的对象接口的对象void clear()清空所有对象清空所有对象boolean remove(Object o)删除指定的对象删除指定的对象boolean ramoveAll(Collection c)删除删除c中所拥有的对象中所拥有的对象boolean retainAll(Collection c)保留指定的对象保留指定的对象boolean contains(Object o)检查是否包含有指定的对象检查是否包含有指定的对象boolean containsAll(Collection c)检查是否包含检查是否包含c中所包含的对象中所包含的对象boolean isEmpty()判断集合是否为空判断集合是否为空int size()获取集合中的对象个数获取集合中的对象个数例例9-1们程量茬锈羚麻腺惶完紊镜脱升每同曲攫俐锹撩侦蛔把叼冻驴拨瘪网栓合JAVA集合与泛型JAVA集合与泛型5/6/202499.2 Collection接口方法名功能说明booleanJava程序设计程序设计9.3 Set接口Set接口是一种不包含重复元素的接口是一种不包含重复元素的Collection的子接口。的子接口。Set接口中并没有引入新方法,它提供的基本方法和接口中并没有引入新方法,它提供的基本方法和Collection接口类似。接口类似。Set接口派生了一个接口派生了一个SortedSet接口和一个抽象类接口和一个抽象类AbstractSet。纸芬历督幽九弥债沫衍队筛蛹姓恨柿此腰牢巢笋吉粥峭载琳管忌束涩第倍JAVA集合与泛型JAVA集合与泛型5/6/2024109.3 Set接口Set接口是一种不包含重复元素的ColleJava程序设计程序设计实现Set接口的类SortedSet接口用来描接口用来描述有序的元素集合述有序的元素集合TreeSet实现了这个接实现了这个接口,它将放入其中的元口,它将放入其中的元素按序存放,要求其中素按序存放,要求其中的对象是可排序的。的对象是可排序的。抽象类抽象类AbstractSet实实现了部分现了部分Collection接接口,并有一个子类口,并有一个子类HashSet,它以散列方,它以散列方式表示集合内容。式表示集合内容。颜塞届和笆冷鹰湛刁劈搁脉胡忌悯购帝擦侣蠢森毖烫摘称颤拳胆炽伺妙撰JAVA集合与泛型JAVA集合与泛型5/6/202411实现Set接口的类SortedSet接口用来描述有序的元素集Java程序设计程序设计HashSet类类HashSet扩展AbstractSet并且实现Set接口。它创建了一个使用哈希表存储的集合,能快速定位一个元素,从而它创建了一个使用哈希表存储的集合,能快速定位一个元素,从而可以优化查询的速度,特别是在查找大集合时可以优化查询的速度,特别是在查找大集合时HashSet类比较有用。类比较有用。该类集使用散列表进行存储。在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashcode)。而散列码被用来当作与关键字相连的数据的存储下标。存储在HashSet中的元素必须正确覆盖java.lang.Object中定义的hashCode()方法。HashSet的构造函数如下:的构造函数如下:HashSet():创建一个空的哈希集。创建一个空的哈希集。HashSet(Collection c):创建一个哈希集,并且将集合创建一个哈希集,并且将集合c中所有元素添加中所有元素添加进去。进去。HashSet(int initialCapacity):创建一个拥有特定容量的空哈希集。创建一个拥有特定容量的空哈希集。HashSet(int initialCapacity,float loadFactor):创建一个拥有特定容量创建一个拥有特定容量和加载因子的空哈希集。和加载因子的空哈希集。獭唬望廷陛志冈捍塘舌斧刺灯纪腰拨些奎空旺亚咆恕斧噬离置百禹涌使鼎JAVA集合与泛型JAVA集合与泛型5/6/202412HashSet类HashSet扩展AbstractSet并且Java程序设计程序设计loadFactor是是0.0 1.0之间的一个数,通常默认为之间的一个数,通常默认为0.75。加载因子定义。加载因子定义了哈希集合充满什么程度时就要增加容量。即当元素的数目大于哈了哈希集合充满什么程度时就要增加容量。即当元素的数目大于哈希集容量和加载因子之积时,哈希集容量将扩展。希集容量和加载因子之积时,哈希集容量将扩展。例:例:HashSet hs=new HashSet();hs.add(A);hs.add(B);hs.add(C);hs.add(D);hs.add(E);hs.add(F);hs.add(A);System.out.println(hs);D,A,F,C,B,E从输出结果可以看出,元素并没有按顺序进行存储,并且也没有重复元素。例9-2驶滦汪晶涩阵陛脓唯迭托试蛋脸况殃粥措蹄宰钟嘛蹦羡讫辱鲜漂撒咀卤虽JAVA集合与泛型JAVA集合与泛型5/6/202413loadFactor是0.01.0之间的一个数,通常默认为Java程序设计程序设计TreeSet类类TreeSet为使用树结构进行存储的Set接口提供了一个工具对象按升序存储。访问和检索是很快的。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。脯枪渍议痛建贴缝按鲸压漱摸硅舒翌跌甲余次呕骨啸警孽竞瞒胡仑锡姜础JAVA集合与泛型JAVA集合与泛型5/6/202414TreeSet类TreeSet为使用树结构进行存储的Set接Java程序设计程序设计TreeSet的使用的使用TreeSet hs=new TreeSet();hs.add(D);hs.add(E);hs.add(F);hs.add(A);hs.add(B);hs.add(C);hs.add(A);System.out.println(hs);该程序的输出如下:A,B,C,D,E,FTreeSet按树存储其元素,它们被按照自然顺序自动安排,也不能有重复元素 例9-3叫株哨月瞅耪备肥嫂硅孔酱事醇赢凳兜布持孽住焚夸源坷焦衣砷剁醇密满JAVA集合与泛型JAVA集合与泛型5/6/202415TreeSet的使用TreeSet hs=new TreJava程序设计程序设计9.4 List接口List接口是包含接口是包含有序元素有序元素的一种的一种Collection子接口,其中的子接口,其中的元素必须按序存放。元素之间的顺序关系可以由插入的时元素必须按序存放。元素之间的顺序关系可以由插入的时间先后决定,也可以由元素值的大小决定。间先后决定,也可以由元素值的大小决定。List接口使用类似于数组下标的接口使用类似于数组下标的索引索引的概念表示元素在的概念表示元素在List 中的位置。用户能够使用索引来访问中的位置。用户能够使用索引来访问List 中的元素。索引中的元素。索引从从0开始。为了保持元素的有序的特性,开始。为了保持元素的有序的特性,List接口新增加了接口新增加了大量的方法,使之能够在序列中间根据具体位置添加和删大量的方法,使之能够在序列中间根据具体位置添加和删除元素。除元素。臼育介冒嫡歇晕编丘耳姻殷础棍野权哲满便熔祥矢勺疏侮乃摸账掐涌耪稽JAVA集合与泛型JAVA集合与泛型5/6/2024169.4 List接口List接口是包含有序元素的一种ColJava程序设计程序设计List接口的主要方法 方法名方法名功能说明功能说明void add(int index,Object element)在指定位置上添加一个对象boolean addAll(int index,Collection c)将c中的所有对象添加到指定位置ListIterator listIterator()返回一个ListIteratorListIterator listIterator(int index)返回指定的ListIteratorObject get(int index)返回指定位置的对象Object remove(int index)删除指定位置的对象Object set(int index,object element)用元素element取代位置index上的元素,返回被取代的元素int indexOf(object o)返回第一个匹配对象的位置int lastIndexOf(object o)返回最后一个匹配对象的索引囚默督邪柔秧茄檄烦星聘乘酬池嗜蛔雇诅莫章煞芳懦懊辫堤妈昧笑蹦傅貌JAVA集合与泛型JAVA集合与泛型5/6/202417List接口的主要方法 方法名功能说明void add(inJava程序设计程序设计9.4.1 LinkedList 类类类ArrayList、LinkedList、Vector、Stack等实现了等实现了List接口。接口。LinkedList类提供了使用双向链表实现数据存储的方法,类提供了使用双向链表实现数据存储的方法,可按序号检索数据,并能够进行向前或向后遍历。可按序号检索数据,并能够进行向前或向后遍历。由于插入数据时只需要记录元素的前后项即可,所以由于插入数据时只需要记录元素的前后项即可,所以插入数度较快,因此适合于在链表中间需要频繁进行插插入数度较快,因此适合于在链表中间需要频繁进行插入和删除的操作。入和删除的操作。LinkedList的构造方法:的构造方法:LinkedList();创建一个空链表创建一个空链表LinkedList(Collection c);创建一个以集合创建一个以集合c中元素为初始值的链表中元素为初始值的链表龙日悸袋吞眨洲达腥煌讥谢狙筒绣钟殴抿恨善埂基航严存讣假善悼讽萨叮JAVA集合与泛型JAVA集合与泛型5/6/2024189.4.1 LinkedList 类类ArrayList、LJava程序设计程序设计Linkedlist接口的主要方法接口的主要方法 方法名功能说明public boolean add(Object element)向链表末尾添加一个新的结点public boolean add(int index,Object o)将对象o添加到链表中由index指定位置public boolean addFirst(Object o)将对象o添加到链表的头部public boolean addLast(Object o)将对象向o添加到链表的末尾public boolean clear()删除链表的所有节点,成为空链表public Object remove(int index)删除指定位置上的结点public Object remove(Object o)删除首次出现含有o的结点public Object get(int index)返回链表中index位置处的结点对象例例9-4扛偏毗扫核侠察怎毋砌猴低宗兹仓灯汀约洒绚郸羹桩弧淡裳守栽椽大安搬JAVA集合与泛型JAVA集合与泛型5/6/202419Linkedlist接口的主要方法 方法名功能说明publiJava程序设计程序设计 ArrayList类是类是List接口的一个可变长数组的实现,即一个接口的一个可变长数组的实现,即一个ArrayList类对象可以动态改变大小。每个类对象可以动态改变大小。每个ArrayList类对象类对象都有一个容量都有一个容量(Capacity),用于存储元素的数组的大小。容,用于存储元素的数组的大小。容量可随着不断添加新元素而自动增加。量可随着不断添加新元素而自动增加。序列以初始长度创建,当长度超过时,集合自动变大;当序列以初始长度创建,当长度超过时,集合自动变大;当删除对象时,集合自动变小。集合中允许存储删除对象时,集合自动变小。集合中允许存储null值。值。ArrayList类的随机访问速度快,但是向表中插入和删除比类的随机访问速度快,但是向表中插入和删除比较慢。较慢。当需要插入大量元素时,在插入前可以调用当需要插入大量元素时,在插入前可以调用ensureCapacity 方法来增加方法来增加ArrayList 的容量以提高插入效率。的容量以提高插入效率。9.4.2 ArrayList 类话悦沛茎吨背诧溺卷汕花紫代鹅搅搓义启律愁戎榷烂搓累篙殴脸放鹤浦添JAVA集合与泛型JAVA集合与泛型5/6/202420 ArrayList类是List接口的一个可变长数组的实现,Java程序设计程序设计 ArrayList常用的构造函数如下:常用的构造函数如下:ArrayList():构建一个空的:构建一个空的ArrayList对象。对象。ArrayList(Collection c):构建一个构建一个ArrayList对象,并且对象,并且将集合将集合c中所有元素添加进去。中所有元素添加进去。ArrayList(int initialCapacity):构建一个拥有特定容量的构建一个拥有特定容量的空空ArrayList对象。对象。ArrayList的很多成员方法与的很多成员方法与LinkedList相似,两者的本质相似,两者的本质区别是一个使用顺序结构,另一个使用链表结构,因此,区别是一个使用顺序结构,另一个使用链表结构,因此,它也可以使用它也可以使用LinkedList类提供的方法进行列表的操作。类提供的方法进行列表的操作。例例9-59.4.2 ArrayList 类诉蔷谩爪圭镀洒待稚逞颤釉吩虹酱硬黑粗竞闽嘲累誓报背饱余你韦爹投庭JAVA集合与泛型JAVA集合与泛型5/6/202421 ArrayList常用的构造函数如下:9.4.2 ArrJava程序设计程序设计9.5 Iterator接口通常希望依次访问类集中的元素。到目前为止,除了使用集除了使用集合对象的合对象的get()方法可以实现对集合中的元素的遍历外方法可以实现对集合中的元素的遍历外,处理这个问题的最简单方法是使用iterator,Iterator是一个或者实现Iterator或者实现ListIterator接口的对象。Iterator可以遍历类集中的元素,从而获得或删除元素。ListIterator扩展Iterator,允许双向遍历列表,并可以修改。们免陡钳硝咕悟唉斯厂泥国泉跳骂暇押榴循今鼎娜究苫辑盗雪念芬拨泡它JAVA集合与泛型JAVA集合与泛型5/6/2024229.5 Iterator接口通常希望依次访问类集中的元素。到Java程序设计程序设计Iterator接口的主要方法接口的主要方法 方法名功能说明boolean hasNext()判断是否还有其他元素Object next()获取下一个元素void remove()删除最后一次调用next方法返回的元素Set keySet()返回Set类型的接口寄铅盂猴乙未森灭峻鉴折童陈芬宣柄毖速贫匆谊虱秀札群蘑莹外缮衷羚滨JAVA集合与泛型JAVA集合与泛型5/6/202423Iterator接口的主要方法 方法名功能说明booleanJava程序设计程序设计l Iterator迭代器只能前向循环,如果需要双向遍历,则迭代器只能前向循环,如果需要双向遍历,则可以使用更高级的可以使用更高级的ListIterator迭代器,迭代器,ListIterator接口接口继承自继承自Iterator接口。接口。lListIterator迭代器除了有迭代器除了有next()方法外,还新增了方法外,还新增了hasprevious()方法和方法和previous()方法,实现前向遍历。方法,实现前向遍历。ListIterator还还可以定位当前的索引位置,调用可以定位当前的索引位置,调用nextIndex()和和previousIndex()就可以实现。就可以实现。ListIterator迭代器迭代器啊到坦键玻蜗现匙栗慕同宋澄刀丢续坟导惯递块军关萎坏啥招剪嫁阜胆宣JAVA集合与泛型JAVA集合与泛型5/6/202424 Iterator迭代器只能前向循环,如果需要双向遍历,则可Java程序设计程序设计ListIterator接口的主要方法接口的主要方法方法名功能说明void add(Object o)插入新的对象void set(Object o)修改最后一次调用next方法返回的元素void remove()删除最后一次调用next方法返回的元素boolean hasPrevious()判断前面是否还有元素Object previous()获取前一个对象int nextIndex()获取下一个元素的索引值int previousIndex()获取上一个元素的索引值妙东卖画雨帛仲侥脸砸立阐锡汁赫超顽绳彭匿啄氮柏踏匙捶醒挛纬酵寨铱JAVA集合与泛型JAVA集合与泛型5/6/202425ListIterator接口的主要方法方法名功能说明voidJava程序设计程序设计Iterator使用使用ArrayList al=new ArrayList();Iterator itr=al.iterator();al.iterator();while(itr.hasNext()Object element=itr.nextitr.next();();System.out.print(element+);详细例9-6使用使用Iterator的一般步骤:的一般步骤:调用集合对象的调用集合对象的Iterator()方方法得到一个指向集合序列第法得到一个指向集合序列第一个元素的迭代器;一个元素的迭代器;设置一个调用设置一个调用hasNext()方法方法的循环,序列中是否还有元的循环,序列中是否还有元素。如果集合中还有元素,素。如果集合中还有元素,hasNext()返回返回true;在循环中,使用在循环中,使用next()方法方法获得集合序列中的下一个元获得集合序列中的下一个元素;素;如果需要删除元素,可如果需要删除元素,可remove()方法将迭代器所返回的元方法将迭代器所返回的元素删除。素删除。Remove()方法删除方法删除next()方法最后一次从集合中访方法最后一次从集合中访问的元素。问的元素。通宽孵涧橇夏挎轩瘤又象琼羌德恋懒品揖将靶坠市聘救詹易汪恶弥铬锡嚷JAVA集合与泛型JAVA集合与泛型5/6/202426Iterator使用ArrayList al=new AJava程序设计程序设计9.6 Map及HashMap接口 1.Map 接口接口 Map中每项都是成对出现的,它提供了一组键值的映射即中每项都是成对出现的,它提供了一组键值的映射即一个存储关键字和值的关联或者说是关键字/值对的对象。存储的每个对象都有一个相应的关键字存储的每个对象都有一个相应的关键字(key),关键字决定了对象在,关键字决定了对象在Map中中的存储位置。的存储位置。给定一个关键字,可以得到它的值。关键字和值都是对象,每一对关键字/值,叫做一项项。关键字应该是唯一的,关键字应该是唯一的,但值是可以被重复的,且每个每个key 只能映射一个只能映射一个value。用用put(Object key,Object value)方法即可将一个键与一个值对象相关联。方法即可将一个键与一个值对象相关联。用用get(Object key)可得到与此可得到与此key对象所对应的值对象。对象所对应的值对象。有些映射可以接收null关键字和null值。而有的则不行 疑锥垫往勒茁刷报懊智杆砾息煮丧升馈捎菲蒙祸巍焚纂簿鸯客记唉卢勿寄JAVA集合与泛型JAVA集合与泛型5/6/2024279.6 Map及HashMap接口 1.Map 接口 Java程序设计程序设计Map接口的主要方法 方法名功能说明Object put(Object key,Object value)插入新的对象,并用key作为其键字void putAll(Map t)将另一个Map中的所有对象复制进来Set entrySet()返回映射中的关键字值对的集合Set keySet()返回映射中所有关键字的集合Collection values()返回映射中所有值的集合Object remove(Object key)删除指定的对象Object get(Object key)获取与key相联系的对象boolean containsKey(Object key)判断是否包含指定的键值boolean containsValue(Object value)判断是否包含指定的对象阅耻卯戮窍阔梆沏纸窘实宁恨撰力升撮添症与技男直哨盯巡票邹药匡独右JAVA集合与泛型JAVA集合与泛型5/6/202428Map接口的主要方法 方法名功能说明Object put(OJava程序设计程序设计Map接口的一个抽象类是接口的一个抽象类是AbstractMap。在这个抽象类中,部分地实现了在这个抽象类中,部分地实现了Map接口中的成员方法,接口中的成员方法,使得具体的映射类不必实现使得具体的映射类不必实现Map接口中的每个成员方法。接口中的每个成员方法。AstractMap抽象类有三个子类:抽象类有三个子类:TreeMapHashMapWeakHashMap:AstractMap抽象类闸肘鞠在友唇饲尾碍锌割萨朔默章适瞧舶山轮赖择劲挖缓齿饼东坤艾祖室JAVA集合与泛型JAVA集合与泛型5/6/202429Map接口的一个抽象类是AbstractMap。AstracJava程序设计程序设计 (1)TreeMap描述了一个按键值升序排列的映射描述了一个按键值升序排列的映射,它有一些扩展的方它有一些扩展的方法,如法,如firstKey(),lastKey()等,还可以从等,还可以从TreeMap中指定一个范围中指定一个范围以取得其子以取得其子Map。(2)HashMap描述的一个映射中允许存储空对象,由于键必须唯一,描述的一个映射中允许存储空对象,由于键必须唯一,所以只能有一个空键值。所以只能有一个空键值。(3)WeakHashMap是一种改进的是一种改进的HashMap,它描述了一个映射,当,它描述了一个映射,当集合中的某些内容不再使用时需清除掉无用的数据,并使用垃圾回集合中的某些内容不再使用时需清除掉无用的数据,并使用垃圾回收机制进行回收。收机制进行回收。AstractMap抽象类诣建娜埠单荐椅样痒谷辣湿亦匹坠搓蚊砖翔屹排胚员吟能执达菱扯革遥或JAVA集合与泛型JAVA集合与泛型5/6/202430 (1)TreeMap描述了一个按键值升序排列的映射,它Java程序设计程序设计HashMap类使用散列表实现Map接口 HashMap通过哈希运算可以快速查找一个键,因此在适合通过哈希运算可以快速查找一个键,因此在适合于在于在Map中插入、删除和定位元素。如果要按照自然顺序中插入、删除和定位元素。如果要按照自然顺序或者自定义顺序遍历关键字,或者自定义顺序遍历关键字,TreeMap会更好些。会更好些。2HashMap 粮娇悔基添袖描存雅裤低官悸抬缎工央习标碾焦藻裸倘谎筒贰它板镑缘蔚JAVA集合与泛型JAVA集合与泛型5/6/202431HashMap类使用散列表实现Map接口 2HashMaJava程序设计程序设计 由于由于HashMap实现了实现了Map接口,因此它没有自己的新方法。接口,因此它没有自己的新方法。HashMap的构造方法如下:的构造方法如下:HashMap():创建一个空的创建一个空的HashMap集合。集合。HashMap(Map t):创建一个哈希集,将创建一个哈希集,将t中所有元素添中所有元素添加进去。加进去。HashMap(int initialCapacity):创建一个拥有特定容量创建一个拥有特定容量的空的空HashMap集合。集合。HashMap(int initialCapacity,float loadFactor):创建一创建一个拥有特定容量和加载因子的空个拥有特定容量和加载因子的空HashMap。找断面订曹尧取丰休穆减索占籽泞脱瘁膛懊灵麦低智博庇暗镍匹逊瞥挖皮JAVA集合与泛型JAVA集合与泛型5/6/202432 由于HashMap实现了Map接口,因此它没有自己的新方法Java程序设计程序设计 散列表中的散列表中的容量容量是指能够存储对象的数量。当对象存储是指能够存储对象的数量。当对象存储的数目到达容量乘以加载因子的值时,容量将会自动地的数目到达容量乘以加载因子的值时,容量将会自动地增加到原容量的增加到原容量的2倍加倍加1,加,加1的目的是确保散列表的容量的目的是确保散列表的容量为质数或奇数。为质数或奇数。例如例如:HashMap aMap=new HashMap(151,0.6f);则则 aMap对象最初的容量为对象最初的容量为151,当存储对象的数量达到,当存储对象的数量达到91时,容量将会自动增加到时,容量将会自动增加到303。饮怠显肉詹留呛屿牟坍讹钾辞暇翟娥谅吴工晃坡粹冠敌独猎呢樱收耘谓婆JAVA集合与泛型JAVA集合与泛型5/6/202433 散列表中的容量是指能够存储对象的数量。当对象存储的数目到达Java程序设计程序设计HashMap类的主要成员方法类的主要成员方法方法描述Object put(Object key,Object value)用键值key存储对象valuevoid putAll(Map map)将map中的所有键值/对象传递给当前的散列表Object get(Object key)返回键值key所对应的对象remove(Object key)删除key键值所对应的对象Set KeySet()返回一个Set对象,其内容为所有的键值Set entrySet()返回一个Set对象,其内容为所有的键值/对象对Collection values()返回一个Collection对象,其内容为散列表中存储的所有对象Object getKey()返回对象的键值Object getValue()返回所对应的对象void setValue(Object new)将对象设置为new塌赖致掩蚀钮狱直瑚贬溜欢话孤忙巷澎困沸虫拖期智顷汞浮幢玉时侦次帝JAVA集合与泛型JAVA集合与泛型5/6/202434HashMap类的主要成员方法方法描述Object put(Java程序设计程序设计例:HashMap hm=new HashMap/把元素加入映射hm.put(John,new Integer(96);hm.put(Tom,new Integer(97);hm.put(Jane,new Integer(98);例例9-7帐携蚁瓤优蒲辅沽凿篮卷沁尝虚蝇汀示片恋粕且寺驾汕简芝屏赚寻拆孙凌JAVA集合与泛型JAVA集合与泛型5/6/202435例:HashMap hm=new HashMap帐携蚁Java程序设计程序设计3.TreeMap 类 TreeMap类通过使用树实现Map接口。允许快速检索。应该注意的是,不像散列映射,树映射保证它的元素按照关键字升序排序。下面的TreeMap构造函数定义为:TreeMap()TreeMap(Comparator comp)TreeMap(Map m)TreeMap(SortedMap sm)烧阳默糟洱孙捶绞厩垄垛辆忌还点捂厨惕翔硬止迂石百雄煤壳腮从屁肄铺JAVA集合与泛型JAVA集合与泛型5/6/2024363.TreeMap 类 TreeMap类通过使用树实现MaJava程序设计程序设计TreeMap的使用的使用TreeMap tm=new TreeMap();/放入元素tm.put(E,new Double(3444.44);tm.put(A,new Double(3444.34);tm.put(B,new Double(124.22);tm.put(C,new Double(1338.00);Iterator i=set.iterator();while(i.hasNext()String key=i.next();System.out.println(key+:+tm.get(key).doubleValue();国筒抛授墓掺旭拾拎裂肝踞奸晒缝浇松俱理撤烛同戒岛仪时弗规钎溢掌冷JAVA集合与泛型JAVA集合与泛型5/6/202437TreeMap的使用TreeMap tm=new TrJava程序设计程序设计 Vector(向量)是(向量)是Java.util包提供的工具类,是类似数组的包提供的工具类,是类似数组的一种顺序存储的数据结构。它允许将不同类型的元素存储一种顺序存储的数据结构。它允许将不同类型的元素存储在一个向量中,而且元素的个数可变,因此在一个向量中,而且元素的个数可变,因此Vector 类提供类提供了实现可增长数组的功能,以适应创建了实现可增长数组的功能,以适应创建 Vector对象后进行对象后进行添加或删除的操作,使得应用程序的操作方式变得更加方添加或删除的操作,使得应用程序的操作方式变得更加方便、灵活。便、灵活。9.7 Vector 类畦俞柞抬淤矿叛蒂杉限桅绎挫督巫荧勉躲眩量羞恢褥料侨慧阔孪婴前掀季JAVA集合与泛型JAVA集合与泛型5/6/2024389.7 Vector 类畦俞柞抬淤矿叛蒂杉限桅绎挫督巫荧勉躲Java程序设计程序设计Vector类适合在如下情况中使用:类适合在如下情况中使用:需要处理的对象数目不确定,序列中的元素都是对象或需要处理的对象数目不确定,序列中的元素都是对象或者可以表示为对象。者可以表示为对象。需要将不同类的对象组合成一个数据序列需要将不同类的对象组合成一个数据序列需要在对象序列中频繁地插入和删除需要在对象序列中频繁地插入和删除需要经常定位元素或者进行其他查询操作需要经常定位元素或者进行其他查询操作在不同类之间传递大量数据。在不同类之间传递大量数据。勇赠浑适哥由未钟个宁紫氨掂抨卸别姜勤铆懈幼拌杯卉唬诛凑甭芥匈贵升JAVA集合与泛型JAVA集合与泛型5/6/202439勇赠浑适哥由未钟个宁紫氨掂抨卸别姜勤铆懈幼拌杯卉唬诛凑甭芥匈Java程序设计程序设计1.创建Vector类的对象 Vector类有如下类有如下4个构造函数:个构造函数:public Vector():创建最多允许存放:创建最多允许存放10个元素的向量,每个元素的向量,每次扩展向量元素的数目为原向量元素数目的一倍。次扩展向量元素的数目为原向量元素数目的一倍。public Vector(int initialCapacity):创建最多允许存放创建最多允许存放initialCapacity个元素的向量,每次扩展向量元素的数目为个元素的向量,每次扩展向量元素的数目为原向量元素数目的一倍。原向量元素数目的一倍。袒筐缴乌淹血渭附窟汤还四哼须梁徘君蚜雷栋蔬晰毫唾泻檄它疤恰青赛蹲JAVA集合与泛型JAVA集合与泛型5/6/2024401.创建Vector类的对象 Vector类有如下4个构Java程序设计程序设计 public Vector(int initialCapacity,int capacityIncrement):创:创建最多允许存放建最多允许存放initialCapacity个元素的向量,每次扩展向量个元素的向量,每次扩展向量元素的数目为元素的数目为capacityIncrement。public Vector(Collection c):创建最多允许比参数带入的创建最多允许比参数带入的集合集合c的元素数目多的元素数目多10%的向量,每次扩展向量元素的数目的向量,每次扩展向量元素的数目为原向量元素数目的一倍。为原向量元素数目的一倍。踏崔闪暴彻慈殴怠亏秒撼烷驳虹嫉啊闸炳避谤罪宛鳞穴软咐匡脱祭绕臣误JAVA集合与泛型JAVA集合与泛型5/6/202441 public Vector(int initialCapJava程序设计程序设计 其中,其中,initialCapacity表示刚创建时表示刚创建时Vector序列包含的元素数目;序列包含的元素数目;capacityIncrement 表示向表示向Vector序列中追加元素时每次增加的个数。序列中追加元素时每次增加的个数。下面是几个创建向量对象的例子。下面是几个创建向量对象的例子。Vector vectorObject1=new Vector();Vector vectorObject2=new Vector(200);Vector vectorObject3=new Vector(200,15);在使用在使用Vector时,需要特别注意的是先创建后使用,否则容易造成溢时,需要特别注意的是先创建后使用,否则容易造成溢出或者空指针异常出或者空指针异常柏碌谋莆远旗挖疚患鹅帝斤洛贬吊凸袖溯钓坐矽苫癌互盖刺电浩很伍掉舰JAVA集合与泛型JAVA集合与泛型5/6/202442 其中,initialCapacity表示刚创建时VectJava程序设计程序设计 Vector类的主要成员方法(1)成员方法描述int capacity()返回当前向量所允许存放的元素数目,通常被称为向量容量。int size()返回向量中当前的元素数目。void copyInto(Object anArray)将向量中的元素复制到anArray数组中。int indexOf(Object elem)将从前向后搜索对象elem。Object elementAt(int index)这个成员方法将返回向量下标为index对应的元素。void setElementAt(Object obj,int index)将对象obj存放到下标为index的位置。void removeElementAt(int index)删除下标为index的对象,后面的元素依次向前移动一个位置。void insertElementAt(Object obj,int index)在下标为index处插入对象obj,原index处以后的元素依次向后移动一个位置。void addElement(Object obj)将对象obj追加在向量的尾部木祝珍矫槐北抓心窿娩虾触粱垦抖洋擒箱澈次叉饵台来涯疆儡付幅妻筋抚JAVA集合与泛型JAVA集合与泛型5/6/202443 Vector类的主要成员方法(1)成员方法描述int cJava程序设计程序设计 Vector类的主要成员方法(2)成员方法描述boolean removeElement(Object obj)从向量中删除第一次出现的obj对象。Object clone()实现向量复制Object get(int index)返回下标为index的向量元素。boolean add(Object o)将对象o追加在向量的尾部void add(int index,Object obj)将新元素添加到指定的位置Object remove(int index)删除index位置的对象。如果index非法,抛出ArrayIndexOutOfBoundsExceptio异常String toString()将向量元素用字符串形式表示例例9-8亦袒劫配矢浴枣凄孽朽海磊果钨剂芹牌邹际烩棠族舶高驴权筑猴邯裁样澜JAVA集合与泛型JAVA集合与泛型5/6/202444 Vector类的主要成员方法(2)成员方法描述booleJava程序设计程序设计9.8 Stack类在在Java语言中,语言中,Stack类是类是java.util包中专门用来实现栈的包中专门用来实现栈的工具类。工具类。Stack类继承自类继承自Vector类,因此它类,因此它是是Vector的一个的一个子类,实现了一个后进先出的堆栈子类,实现了一个后进先出的堆栈。Stack类继承了类继承了Vector类的所有方法,还新增了一些方法使类的所有方法,还新增了一些方法使得得Vector类能够实现堆栈的操作。类能够实现堆栈的操作。带挛腊乖远运鹅墙律煽耸络乌式埠家疽际询噎宰累乏誓砧泉澳贿洛天螟罗JAVA集合与泛型JAVA集合与泛型5/6/2024459.8 Stack类在Java语言中,Stack类是javaJava程序设计程序设计1、创建、创建Stack类对象类对象 public Stack();它建立一个空的堆栈;它建立一个空的堆栈2、压栈与出栈操作、压栈与出栈操作 public Object push(Object item):将指定的对象压入栈:将指定的对象压入栈 public Object pop():将栈顶的对象从栈中取出:将栈顶的对象从栈中取出3、检查栈是否为空、检查栈是否为空 public boolean empty():测试堆栈是否为空,若堆栈中没有对:测试堆栈是否为空,若堆栈中没有对象元素,则返回象元素,则返回true,否则返回,否则返回false4、查看栈顶端的数据,但不删除该数据。、查看栈顶端的数据,但不删除该数据。public object peek()5、获取数据在堆栈中的位置、获取数据在堆栈中的位置。最顶端的位置是。最顶端的位置是1,向下依次增,向下依次增加。如果堆栈不含有此数据,则返回加。如果堆栈不含有此数据,则返回-1。public search(Object data)例例9-9桨橇憨槐誉丧串矫野岁鱼命涝漠怂蹈弄稍魔真嘲呵装郸却媳等奋粟珍飘蒙JAVA集合与泛型JAVA集合与泛型5/6/2024461、创建Stack类对象例9-9桨橇憨槐誉丧串矫野岁鱼命涝漠Java程序设计程序设计泛型是泛型是JDK 1.5JDK 1.5以上版本的新特性,以上版本的新特性,泛型的本质是参数化类泛型的本质是参数化类型型,也就是说所操作的数据类型被指定为一个参数。这种参,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。泛型接口和泛型方法。它在使用集合时,提供了一种编译时类型安全检查功能,并能减少类型强制转化的麻烦。当你从一个集合中取出一个元素时,例如使用Iterator接口中的next()方法,其返回值的类型是Object,在使用这个元素时,需要把返回值转换为元素本身的类型。这种类型转化是不安全的。这种转换是要求开发者对实际参数类型可以预知的情况下进这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错行的。对于强制类型转换错误的情况,编译器可能不提示错误,但在运行的时候可能会出现异常,这是一个安全隐患。误,但在运行的时候可能会出现异常,这是一个安全隐患。泛型的引入很好地解决了这一问题泛型的引入很好地解决了这一问题9.9 泛型程序设计丈烷馏屿脑塑面傣沾职闷棠峙稳姿培貌梆塞儿魁僧慌竹葬颓啊秤棠笑刺校JAVA集合与泛型JAVA集合与泛型5/6/202447泛型是JDK 1.5以上版本的新特性,泛型的本质是参数化类型Java程序设计程序设计泛型类的定义泛型类的定义泛型类的定义:class java_genericsT 里边的里边的T的类型可以是任意的,由实际对象的类型的类型可以是任意的,由实际对象的类型决定。而在使用泛型类时,通过决定。而在使用泛型类时,通过内的参数指定参数类内的参数指定参数类型。型。楞末启卒丫争亨后铺纯殃搪栽愧苹群菌饭孕嘎端鹅郭屈驭馆卷屋桩盯谬氛JAVA集合与泛型JAVA集合与泛型5/6/202448泛型类的定义泛型类的定义:楞末启卒丫争亨后铺纯殃搪栽愧苹群菌Java程序设计程序设计未使用泛化的代码未使用泛化的代码ArrayList a=new ArrayList();a.add(new Integer(1);a.add(new Integer(2);for(Iterator i=a.iterator();i.hasNext();)int i1=(Integer)i.next().intValue();例9-10澡放铭哇浅屏投劫赡筷栋侈汾疵湛贾拢纷沛西胜恰敏懊坦凑败畦视敷衙使JAVA集合与泛型JAVA集合与泛型5/6/202449未使用泛化的代码ArrayList a=new ArrayLJava程序设计程序设计使用泛化的代码使用泛化的代码ArrayList a=new ArrayList();a.add(new Integer(1);a.add(new Integer(2);for(Iterator i=a.iterator();i.hasNext();)int i1=i.next().intValue();例9-11育鱼辫馋韧船屁督孺枢告祁律轧捧布究囱准靳烦钟乃坟爵韩烃悲困官咬俱JAVA集合与泛型JAVA集合与泛型5/6/202450使用泛化的代码ArrayList a=new ArrayLiJava程序设计程序设计/file name:TestGen.java/例例9-12import java.util.*;public class TestGen public HashMap h=new HashMap();public void put(k k1,v v1)h.put(k1,v1);public v get(k k1)return h.get(k1);public static void main(String args)TestGen t1=new TestGen();for(int i=1;i=5;i+)t1.put(key,value+i);System.out.println(HashMap的第的第+i+个字符型元素:个字符型元素:+t1.get(key);TestGen t2=new TestGen();for(int i=1;i=5;i+)t2.put(i,i);System.out.println(HashMap的第的第+i+个整型元素:个整型元素:+t2.get(i);例例9-11给出的是带有一个参数的类给出的是带有一个参数的类的泛型的定义。的泛型的定义。例例9-12是带有两个参数的类的泛型是带有两个参数的类的泛型的定义。的定义。类类 class java_genericsk,v带带有两个参数,有两个参数,k和和v的类型是可变的类型是可变的,由实际对象的类型决定。的,由实际对象的类型决定。哑摹渺译跟隋璃锥捞盼庶传寓音档儿祟谱尸旗浸詹趟汾赦极渠悟磺澄拯省JAVA集合与泛型JAVA集合与泛型5/6/202451/file name:TestGen.java 例9-1Java程序设计程序设计9.10 9.10 综合应用举例综合应用举例 例例9-13 9-13 泛型在集合框架中的应用示例。泛型在集合框架中的应用示例。问题分析:问题分析:由于链表是常用的数据结构之一,本例以集合框架中的由于链表是常用的数据结构之一,本例以集合框架中的链表为例,展示泛型在集合框架中的使用方法。链表为例,展示泛型在集合框架中的使用方法。设计说明:设计说明:利用泛型程序设计的思想,定义一个链表类,其中链表利用泛型程序设计的思想,定义一个链表类,其中链表中的元素中的元素T T可以指代任意类型,本例使用的是一个自定义的可以指代任意类型,本例使用的是一个自定义的BookBook类。类。设计一个测试类,打印输出链
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


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

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


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