《工具类与算法.ppt》由会员分享,可在线阅读,更多相关《工具类与算法.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、工具类与算法工具类与算法现在学习的是第1页,共39页Q1:Integer的大小比较的大小比较nWhenboxing(transforminginttoInteger)thecompilerusesacacheforsmallvalues(-128-127)andreusesthesameobjectsforthesamevalues.现在学习的是第2页,共39页Q2:Scanner的使用的使用现在学习的是第3页,共39页Q3:面试题:面试题现在学习的是第4页,共39页现在学习的是第5页,共39页总结总结nJava编程语言只有值传递参数。不管是原始类型还编程语言只有值传递参数。不管是原始类型还是
2、引用类型,传递的都是副本。是引用类型,传递的都是副本。n如果参数类型是原始类型,那么传过来的就是这个参数的一如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值。如果在函数中改变了个副本,也就是这个原始参数的值。如果在函数中改变了副本的值,但不会改变原始的值。副本的值,但不会改变原始的值。n如果参数类型是引用类型,那么传过来的就是这个引用参如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的没有改变这个副本的地址,而是改变了地
3、址中的值,那值,那么在函数内的改变会影响到传入的参数。如果在函数中改么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如变了副本的地址,如new一个,那么副本就指向了一个新一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的的地址,此时传入的参数还是指向原来的地址,所以不地址,所以不会改变参数的值。会改变参数的值。现在学习的是第6页,共39页集合集合-向量向量n问题引入问题引入:v若要处理一组若要处理一组相同类型相同类型的已知数量的数据,则可以使用哪种结构的已知数量的数据,则可以使用哪种结构?如:处理如:处理10个整型数据或一个班级个整型数据或一个班级30名同学数据
4、等。名同学数据等。v若要处理一组若要处理一组不同类型不同类型的数据,数量未知,该用哪种结构描述的数据,数量未知,该用哪种结构描述?如:要存储如:要存储2个个整型、整型、几个几个字符串、字符串、若干个若干个Student数据数据n实际应用:实际应用:v到超市买东西,购买不同商品,如何实现?到超市买东西,购买不同商品,如何实现?现在学习的是第7页,共39页集合与集合框架集合与集合框架n集合v一个将一个将多个元素多个元素组合进一个单元或容器的对象组合进一个单元或容器的对象v提供用于存储、获取和操作数据的方法提供用于存储、获取和操作数据的方法n“集合框架”(Collections Framework)
5、v提供一组接口和类,为数据结构中的各种类型提供一个方便操提供一组接口和类,为数据结构中的各种类型提供一个方便操作的接口和类的作的接口和类的APIv提供方便提供方便操作操作各种数据结构各种数据结构的方法的方法n集合框架主要包括v集合容器集合容器用于用于存储存储数据数据v迭代器迭代器用于用于获取获取数据数据v算法算法用于用于操作操作数据数据集合:元素数据类型可以不同集合:元素数据类型可以不同数组:元素数据类型相同数组:元素数据类型相同现在学习的是第8页,共39页集合与集合框架集合与集合框架n集合框架优点集合框架优点v高性能高性能v减少编程工作量减少编程工作量精力集中于程序的重要部分精力集中于程序的
6、重要部分v通用性通用性集合框架集合框架API,不同类型的集合以相似的方式进行操作,不同类型的集合以相似的方式进行操作v可拓展性可拓展性容易扩展和改变一个集合容易扩展和改变一个集合提供了将标准数据集成到集合框架中的机制提供了将标准数据集成到集合框架中的机制现在学习的是第9页,共39页集合框架图集合框架图MapCollectionSetIteratorListComparableHashSetHashMapArrayListLinkedList现在学习的是第10页,共39页集合分类集合分类n在不同的组织方式中,主要有三种类型的集合,称作集(set)、序列(list)、映射(map)v集:对象聚集,
7、可以向集中增加对象,但集:对象聚集,可以向集中增加对象,但不能有重复不能有重复的对象的对象v序列:序列:有序有序的对象聚集,对象按照一定的顺序存放,的对象聚集,对象按照一定的顺序存放,允许重复允许重复v映射:映射的每一项都含有映射:映射的每一项都含有一对对象一对对象,每个对象都有一个与之相关,每个对象都有一个与之相关联的键对象,键决定了对象在映射中的存储位置。映射中的联的键对象,键决定了对象在映射中的存储位置。映射中的键必键必须各不相同须各不相同。现在学习的是第11页,共39页各类集合容器图示各类集合容器图示1243756141212K3-v2K1-v1K2-v1K4-v3集列表 映射现在学习
8、的是第12页,共39页Collection 接口 表示一组对象,有些允许重复,有些不允许,有些有序,有些无序Set 接口继承 Collection不允许重复List 接口继承 Collection允许重复,以元素安插的次序来放置元素,不会重新排列三、集合框架中的三、集合框架中的主要接口主要接口CollectionCollectionSetSetListListMapMapMap接口存放键值对象不能有重复的key13现在学习的是第13页,共39页Collection接口vCollection最基本的集合接口声明所有集合都将拥有的核心方法主要子接口Set不包含重复元素List按照添加顺序存储,可以
9、包含重复元素14现在学习的是第14页,共39页Collection主要操作v重要方法重要方法单元素添加、删除操作:booleanadd(Objecto):将对象添加给集合booleanremove(Objecto):如果集合中有与o对象,则删除组操作:作用于元素组或整个集合booleancontainsAll(Collectionc):查找集合中是否含有集合c中所有元素booleanaddAll(Collectionc):将集合c中所有元素添加给该集合voidclear():删除集合中所有元素voidremoveAll(Collectionc):从集合中删除集合c中的所有元素voidretai
10、nAll(Collectionc):从集合中删除集合c中不包含的元素15现在学习的是第15页,共39页Collection主要操作v重要方法重要方法查询操作:intsize():返回当前集合中元素的数量booleanisEmpty():判断集合中是否有任何元素booleancontains(Objecto):查找集合中是否含有对象oIteratoriterator():返回一个迭代器,用来遍历集合中各元素Collection转换为Object数组:ObjecttoArray():返回一个内含集合所有元素的arrayObjecttoArray(Objecta):返回一个内含集合所有元素的arra
11、y。返回的array和参数a的类型相同。16现在学习的是第16页,共39页Set接口及实现类接口及实现类vSet接口特点:接口特点:不允许包含相同的元素至多有一个null元素常用方法同Collection接口v实现实现Set的类的类:HashSet无序顺序可以改变快速-散列法使访问速度很快TreeSet有序顺序是不变的,要么是升序要么是用户自定义顺序,因此使用的时候元素必须具有可比较性。17现在学习的是第17页,共39页HashSet类vHashSet类类主要实现Set接口元素无序,不能重复,类型无限制现在学习的是第18页,共39页课堂实践课堂实践1v创建一个容器对象,向容器中添加各种对象,并
12、输出创建一个容器对象,向容器中添加各种对象,并输出。v参考示例:参考示例:importjava.util.*;classHashSetDemopublicstaticvoidmain(Stringargs)/1.创建一个容器创建一个容器,类型为,类型为HashSetHashSeths=newHashSet();/2.向容器中添加元素向容器中添加元素hs.add(B);hs.add(A);hs.add(D);hs.add(123);hs.add(0.23);hs.add(newCircle(3);/3.输出容器的元素输出容器的元素System.out.println(hs);现在学习的是第19页
13、,共39页TreeSet类vTreeSet主要实现Set接口和SortedSet接口,元素有序(自然顺序或提供的排序方式),不能重复,必须具有可比性v示例:示例:TreeSet ts=new TreeSet();ts.add(zhangshan);ts.add(“lishi);ts.add(“wangwu);ts.add(“maliu);20现在学习的是第20页,共39页Set使用注意点使用注意点v如何保证加入的元素如何保证加入的元素不重复不重复?加入元素add(Objectobj)方法若容器中没有obj对象,则添加,返回true如果obj已经存在集合中,将返回false21现在学习的是第21
14、页,共39页遍历元素遍历元素Iterator接口接口vIterator接口接口遍历集合中元素每个Collection都有iterator()方法,此方法返回Iterator对象重要方法Objectnext()/返回要访问的下一个对象booleanhasNext()/是否存在另一个需访问的元素,是返回truevoidremove()/删除上次调用next时返回的对象22现在学习的是第22页,共39页课堂实践课堂实践3vIterator接口操作,对前面的接口操作,对前面的HashSet和和TreeSet两个容器两个容器中的元素进行迭代显示。中的元素进行迭代显示。v参考示例:参考示例:查看集合中的所
15、有元素,可使用如下方法:查看集合中的所有元素,可使用如下方法:/获取迭代对象获取迭代对象Iteratorit=c.iterator();while(it.hasNext()/判断是否还有元素判断是否还有元素Objectobj=it.next();/元素获取元素获取23现在学习的是第23页,共39页小结小结vCollection接口是根接口,主要的子接口为接口是根接口,主要的子接口为Set和和List。v对象一旦放入容器,则全部分看作为对象一旦放入容器,则全部分看作为Object对象,对象,若要指定某一类型,则须使用范型。若要指定某一类型,则须使用范型。vSet主要两个实现类主要两个实现类Has
16、hSet和和TreeSetHashSet无序,无重复,类型无限制TreeSet有序,无重复,对象间具有可比性24现在学习的是第24页,共39页List接口vCollection接口的子接口,继承了其方法接口的子接口,继承了其方法v其元素以线性方式存储。其元素以线性方式存储。v特点:特点:元素可重复可重复元素有序有序可以对元素的位置精确控制v实现类实现类ArrayListLinkedListVectorStack现在学习的是第25页,共39页List接口常用方法v添加元素添加元素booleanadd(Ee)向列表的尾部添加指定的元素voidadd(intindex,Eelement)在列表的指定
17、位置插入指定元素booleanaddAll(Collectionc)添加指定collection中的所有元素到此列表的结尾booleanaddAll(intindex,Collectionc)将指定collection中的所有元素都插入到列表中的指定位置现在学习的是第26页,共39页List接口常用方法v设置元素设置元素Eset(intindex,Eelement)用指定元素替换列表中指定位置的元素。v获取元素获取元素Eget(intindex)返回列表中指定位置的元素。intindexOf(Objecto)返回此列表中第一次出现的指定元素的索引,否则返回-1intlastIndexOf(Ob
18、jecto)返回此列表中最后出现的指定元素的索引,否则返回-1。ListsubList(intfromIndex,inttoIndex)返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。现在学习的是第27页,共39页List接口常用方法v移除元素移除元素Eremove(intindex)移除列表中指定位置的元素booleanremove(Objecto)从此列表中移除第一次出现的指定元素(如果存在)booleanremoveAll(Collectionc)从列表中移除指定collection中包含的其所有元素voidclear()从列表中移除所有元素现在学习的
19、是第28页,共39页List接口常用方法v相关判断方法相关判断方法booleancontains(Objecto)如果列表包含指定的元素,则返回truebooleancontainsAll(Collectionc)如果列表包含指定collection的所有元素,则返回truebooleanequals(Objecto)比较指定的对象与列表是否相等booleanisEmpty()如果列表不包含元素,则返回true现在学习的是第29页,共39页ArrayList介绍v ArrayList就是传说中的就是传说中的动态动态数组数组,内部封装了内部封装了一个一个Object类型的数组类型的数组v特点特点
20、:动态的增加和减少元素灵活的设置数组的大小与数组相比,性能稍差现在学习的是第30页,共39页ArrayList常用方法v新增方法新增方法VoidensureCapacity(intminCapacity)如有必要,增加此ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。voidtrimToSize()将此ArrayList实例的容量调整为列表的当前大小。voidremoveRange(intfromIndex,inttoIndex)移除列表中索引在fromIndex(包括)和toIndex(不包括)之间的所有元素。现在学习的是第31页,共39页三、LinkedLis
21、t介绍v实现实现List接口接口,基于双向循环链表结构基于双向循环链表结构现在学习的是第32页,共39页LinkedList常用方法v添加元素添加元素voidaddFirst(Ee)将指定元素插入此列表的开头voidaddLast(Ee)将指定元素添加到此列表的结尾v获取元素获取元素element()获取但不移除此列表的头(第一个元素)Eget(intindex)返回此列表中指定位置处的元素EgetFirst()返回此列表的第一个元素EgetLast()返回此列表的最后一个元素现在学习的是第33页,共39页LinkedList常用方法v移除元素移除元素Eremove()获取并移除此列表的头(第
22、一个元素)Eremove(intindex)移除此列表中指定位置处的元素booleanremove(Objecto)从此列表中移除首次出现的指定元素(如果存在)EremoveFirst()移除并返回此列表的第一个元素removeLast()移除并返回此列表的最后一个元素。现在学习的是第34页,共39页ArrayList和LinkedList比较vArrayList基于数组,基于数组,LinkedList基于链表基于链表v随机访问元素,随机访问元素,ArrayList优于优于LinkedListv增加和删除元素,增加和删除元素,LinkedList优于优于ArrayListv可用可用Linked
23、List实现栈、队列结构实现栈、队列结构v结论:结论:若是随机获取元素值,则用ArrayList若是频繁添加和删除元素,则用LinkedList现在学习的是第35页,共39页向量类VectorvVector类以实现类似动态数组的功能类以实现类似动态数组的功能v使用了使用了synchronized方法(线程安全)所以性方法(线程安全)所以性能上比能上比ArrayList要差要差 v向量类提供了三种构造方法:向量类提供了三种构造方法:publicvector()publicvector(intinitialcapacity,intcapacityIncrement)publicvector(int
24、initialcapacity)现在学习的是第36页,共39页Stack类vStack继承自继承自Vector,实现一个后进先出的堆栈。,实现一个后进先出的堆栈。vStack提供提供5个额外的方法使得个额外的方法使得Vector得以被当得以被当作堆栈使用。作堆栈使用。v基本的基本的push和和pop方法,还有方法,还有peek方法得到栈方法得到栈顶的元素,顶的元素,empty方法测试堆栈是否为空,方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。方法检测一个元素在堆栈中的位置。vStack刚创建后是空栈。刚创建后是空栈。现在学习的是第37页,共39页Map接口v映射(映射(Ma
25、p)用于存放“键键-值值”对键和值都是对象,键必须是唯一的键必须是唯一的,但值可以重复根据键值,能找到它对应的一个值CompanyLogo身份证号人商品ID商品房屋ID房屋一般数据表中主键数据表对应的实体类现在学习的是第38页,共39页HashMap类vHashMap类类是使用哈希表实现Map接口允许null,即nullvalue和nullkey常用方法增加和取出内容put(Objectkey,Objectvalue)增加内容get(Objectkey)根据key找出其对应的value判断是否存在containsKey(Objectkey)判断是否存在指定的keycontainsValue(Objectvalue)判断是否存在指定的value转换为Set视图、SetpublicSetentrySet()返回的是包含所有映射键值对的集合,每个集合元素就是一个Map.Entry对象publicSetkeySet()返回键的集合视图publicCollectionvalues()返回值的集合视图CompanyLogo加入HashMap中元素所在类,如果是自定义的类,必须要重写hashcode和equals方法现在学习的是第39页,共39页
限制150内