




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工具类及常用算法Part1Java语言基础类 java lang包 Object类 1 类Object是类层次结构的根类 每个类都使用Object作为超类 所有对象 包括数组 都实现这个类的方法 类Object尽管是一个具体类 但是实际它主要是为了扩展 它所有的非final方法 equals toString finalize clone hashCode 都有明确的约定 因为都是为了改写而设计的 Object类 2 Object类的方法 protectedObjectclone throwsCloneNotSupportedException 生成一个对象备份publicbooleanequals Objecto publicinthashCode 返回该对象的哈希码值 将该对象的内部地址转换成一个整数publicStringtoString protectedvoidfinalize publicfinalClassgetClass publicfinalvoidnotify thread publicfinalvoidnotifyAll thread publicfinalvoidwait thread clone JDK中Object类中clone 方法的定义如下 protectednativeObjectclone throwsCloneNotSupportedException protected此方法是专门为继承而设计的 native用来修释方法 表示该方法不是用java写成 通常是C C 或者汇编应用clone 方法 TestClone1 java应用该方法的对象必须实现Cloneable接口 否则异常 必须重写clone 方法 在该方法中必须使用super clone 注意shallowclone与deepclone TestClone2 java Object类 equals 用来比较两个对象的引用是否相等 何时改写equals 呢 当一个类有自己特有的逻辑相等的概念 一些类已经改写了此方法 比如 Date JDK中 Date类的源代码如下 publicbooleanequals Objectobj returnobjinstanceofDate java util Date两个构造方法 Date 分配Date对象并初始化此对象 以表示分配它的时间 精确到毫秒 Date longdate 自从标准基准时间 称为 历元 epoch 即1970年1月1日00 00 00GMT 以来的指定毫秒数 Object类 equals importjava util Date publicclassTestDate publicstaticvoidmain String args Dated1 newDate 800 Dated2 newDate 800 System out println d1 toString System out println d2 toString ThuJan0108 00 00CST1970if d1 equals d2 System out println d1equalsd2 Object类 equals classMyDate intday month year publicMyDate inti intj intk day i month j year k 自定义的Date类 重写equals classMyNewDateextendsMyDate publicMyNewDate inti intj intk super i j k 重写equals 方法publicbooleanequals Objectobj if objinstanceofMyNewDate MyNewDatem MyNewDate obj if m day day hashcode 返回该对象的哈希码值 将该对象的内部地址转换成一个整数返回对象的散列值 在使用散列表 Hashtable 存储对象时是必须的 Object类的hashCode方法实现是将对象内存地址转换成一个整数 所以 不同对象的散列值不同 实现的规则 一些类已重写了此方法 如String 对象使用equals比较返回 真 时 散列值应该相等 equals方法返回 假 时 散列值不必不等 但不等的散列值会带来效率的提高 举例 TestHashCode java Object类 toString 对象的toString方法返回对象的文本表示 Object类的实现 JDK源代码publicStringtoString returngetClass getName Integer toHexString hashCode Eg PhoneNumber 163b91 hardlyunderstand一般情况 给出toString方法的实现 publicStringtoString returnareaCode num Object类 getClass 该方法返回一个对象的运行时类信息 除了instanceof可以对运行时类进行判断外 Object类的getClass 方法也可以获得运行时信息 这种获得对象运行时信息的方法叫作反射 reflection RunTimeClassInfo javaClass类的主要方法 getFields getMethods getName getPackage isArray isInterface JAVA反射机制 1 Reflection是Java被视为动态 或准动态 语言的一个关键性质 这个机制允许程序在运行时透过ReflectionAPIs取得任何一个已知名称的class的内部信息JAVA反射机制是在运行状态中 对于任意一个类 都能够知道这个类的所有属性和方法 对于任意一个对象 都能够调用它的任意一个方法 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 Java反射机制主要提供了以下功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法 JAVA反射机制 2 一个例子让大家更直观的了解反射的使用方法 通过类名来构造一个类的实例Classcls str Class forName java lang String 上面这句很眼熟 因为使用过JDBC访问数据库的人都用过 Objectstr cls str newInstance 相当于Stringstr newString JAVA反射机制 3 常见应用1 得到某个对象的属性publicObjectgetProperty Objectowner StringfieldName throwsException ClassownerClass owner getClass 得到该对象的ClassFieldfield ownerClass getField fieldName 通过Class得到类声明的属性Objectproperty field get owner 通过对象得到该属性的实例 如果这个属性是非公有的 这里会报IllegalAccessExceptionreturnproperty JAVA反射机制 4 得到某个类的静态属性publicObjectgetStaticProperty StringclassName StringfieldName throwsException ClassownerClass Class forName className 首先得到这个类的ClassFieldfield ownerClass getField fieldName 和上面一样 通过Class得到类声明的属性Objectproperty field get ownerClass 这里和上面有些不同 因为该属性是静态的 所以直接从类的Class里取returnproperty 工具类及常用算法Part2集合类 util包 包含集合框架 日期和时间设施 国际化和各种实用工具类 字符串标记生成器 随机数生成器和位数组 数组vsCollection 通常 程序在运行时才知道具体的条件去创造对象 不到运行时 不知道所需对象的数量 甚至类型 所以不能希望创建引用来持有每一个对象 因为不可能知道有多少个这样的对象 Java提供了多种方式来保存这些对象 数组 Array 是java内置的类型Array允许执行get或set 见API 集合 JavaCollectionsFramework java的实用类库提供了一套相当完整的容器类 Arrays类 java util Arrays 在java util库中Arrays类有多个static方法 提供操作数组的实用功能 排序 搜索 五个基本静态方法 equals Object a Object a2 比较两个数组是否相等 fill 用某值填充某一部分的数组 sort 对数组进行排序 binarySearch 在已经排序的数组中二分法查找元素 toString 数组内容的字符串表示形式 字符串表示形式由数组的元素列表组成 括在方括号 中 相邻元素用字符 逗号加空格 分隔 Example UsingArrays java Java集合类介绍 集合对象就是一组对象的表示 不同的集合可以采用不同的数据结构算法进行元素的存储管理 与数组不同集合中的元素都是对象 基本数据类型要使用其包装类才能作为集合的元素 集合类容纳的都是Object类的实例 一旦把一个对象置于集合类中 它的类信息将丢失 原集合类 jdk1 1 5种基本数据结构 Array Vector Hashtable Bitset Stack新集合类 jdk1 2 庞大的集合体系 Java提供了Collection Set List来表示各种不同的集合 数据结构 向量Vector Vector对应于类似数组的顺序数据结构 它是允许不同元素共存的可变数组 VectorvsArrayVector 处理对象数目不定 序列的元素都是对象 将不同类的对象组成一个数据系列 经常需要定位序列中的对象或查找操作 Array 序列中的元素都是简单数据类型 序列中的元素的数目相对固定 插入 删除和查找操作较少 向量Vector Vector有3个构造方法 最复杂的一个 publicVector intinitCapacity intcapacityIncrement 缺省参数的构造方法 向量的初始容量为10主要方法 publicintcapacity 返回容量publicintsize 返回元素的数量publicbooleancontains Objectelem 测试指定的对象是否在此向量中publicvoidaddElement Objectobj 将指定的组件添加到此向量的末尾publicbooleanremoveElement Objectobj 从此向量中移除变量的第一个 索引最小的 匹配项举例 CatsandDogs java 数据结构 堆栈Stack 线性数据结构 遵循后进先出原则 Stack是java用来实现栈的工具 Stack类是Vector的子类 Stack只能在一端输入输出 压栈 弹栈 主要方法 publicvoidpush Objectitem publicObjectpop publicObjectpeek publicbooleanempty 栈是否为空publicintsearch 可以使用Vector类的方法 addElement elementAt importjava util publicclassTestStack staticString months Jan Feb Mar publicstaticvoidmain Stringargs Stacks newStack for inti 0 i months length i s push months i System out println Stack s while s empty System out println s pop Hashtable类 Hashtable类没有序列的概念 通过key查找对象 Hashtable类是Dictionary 抽象类 的子类 使用key寻找value Dictionary的方法 intsize 返回元素个数booleanisEmpty 是否为空publicvoidput Objectkey Objectvalue 放入一对publicObjectget Objectkey 通过key检索一个值publicvoidremove Objectkey 通过key移除一个值Enumerationkeys 得到键的枚举器Enumerationelements 得到值的枚举器Hashtable类的key是一个特殊值 Hashcode 对象的相对唯一整数 booleancontainsKey Objectkey 检查是否散列表的键Hashtable中 键和值都不可以为null举例 使用Math random 产生10000个0 19的随机整数 判断是否是平均分布的 importjava util publicclassTestHashTable publicstaticvoidmain Stringargs Hashtableht newHashtable ht put one newInteger 1 ht put two newInteger 2 ht put three newInteger 3 Enumerationem ht keys while em hasMoreElements Objectkey em nextElement Objectvalue ht get key System out println key value 新集合类JavaCollectionsFramework Collection是集合类的根接口 java没有提供任何类来直接实现此接口 而是给出了一些更为专门的子接口 如Set List 然后再提供一些类来实现这些子接口 有的集合允许元素重复 List 有的集合不允许 Set 有的集合有序 List 有的没有 Set Map接口不是集合 它是映射表 Java集合类 Set 集 不记录元素的保存顺序 而且不允许有重复元素 所谓不重复 是指两个对象不满足a equals b Set中可以包含null对象 但最多只能有一个null对象 List 列表 记录元素的保存顺序 而且允许有重复元素 List接口 List接口是Collection的子接口ArrayList Vector LinkedList是实现List接口的两个重要实现List表示的是对象可重复的集合ArrayList Vector实际上是Java中的 动态数组 元素是有序的 Array在用new创建之后 length是不可变的 而ArrayList和Vector的元素个数 size 是可变的 Vector是线程安全的 synchronized ArrayList举例 importjava util publicclassTestArrayList publicstaticvoidmain Stringarg ArrayListh newArrayList h add 1st h add 2nd h add 3rd h add newInteger 6 h add 2nd repeat print h publicstaticvoidprint Lists System out println s LinkedList及队列 队列 queue 遵循 先进先出 的原则 固定在一端输入数据 加队 另一端输出数据 减队 Java中 用LinkedList来实现队列 它实现了list接口 也是一种线性结构 LinkedList提供了序列的头尾操作 主要方法 publicvoidaddLast Objectitem publicObjectremoveFirst importjava util publicclassTestHashTable publicstaticvoidmain Stringargs Queueq newQueue for inti 0 i 5 i q enqueue i while q isEmpty System out println q dequeue classQueueextendsLinkedList voidenqueue Objectobj addLast obj Objectdequeue returnremoveFirst publicbooleanisEmpty returnsuper isEmpty Set接口 Set接口是Collection的子接口HashSet TreeSet是实现List接口的两个重要实现Set表示的是对象不可重复的集合 也就是会使用equals 方法进行判断 TreeSet是一种有序的集合 元素会按照升序排列 注意Comparator 的构造 first 获取排在最低位的一个last 最后一个 最大 元素 Set接口及HashSet类 例子 importjava util publicclassTestHashSet publicstaticvoidmain Stringarg HashSeth newHashSet h add 1st h add 2nd h add 3rd h add newInteger 6 h add 2nd repeat print h publicstaticvoidprint Sets System out println s usetoString Map接口 Map接口提供了一组 关键字 值 的集合Map接口的重要实现类有 Hashtable HashMap TreeMap Properties等 其中 Properties是Hashtable的子类 其键值只能是String HashMap允许使用null键和null值 除了不同步和允许使用null之外 HashMap类与Hashtable大致相同 Iteration遍历器 存取集合中的元素 ArrayList和Vector的元素与索引有关 可以用位置来取得元素 例如 elementAt intindex removeElementAt intindex insertElementAt Objectobj intindex 除此以外 每个集合 Collection 对象都提供一个遍历器 遍历器对象实现Iterator接口 支持前向遍历 而ListIterator支持双向遍历 Iterator的方法有 publicbooleanhasNext 是否还有下一元素publicObjectnext 得到下一元素publicremove 移除当前元素对于 传统的 的Vector和Hashtable类 还提供了另外一种遍历手段 Enumeration 该接口基本上被Iterator取代 只能单向遍历 Example TestListAllElements java Collections类 该类可用来排序和搜索一个列表 List 静态方法 sort 和binarySearch 具体方法与Arrays的方法类似 与集合类相关的Java新特性 在JDK5 0中 Java借鉴其他语言的优点 增加了许多新特性 包括 泛型增强for循环自动装包与拆包 泛型 Generic 泛型是JDK5 0增加的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年核工业事业单位招聘考试综合类无领导小组讨论面试真题模拟试卷
- 2025湖南张家界市永定区发展和改革局招聘公益性岗位工作人员模拟试卷及参考答案详解
- 水分对植物生长调控的作用-洞察与解读
- 内镜下憩室影像学评估-洞察与解读
- 多重药物协同机制-洞察与解读
- 鹤壁护士考试题库及答案
- 河南会考试卷及答案高一
- 2025年中国无烟煤粉行业市场分析及投资价值评估前景预测报告
- 理论专业知识培训总结课件
- 智能材料应用-第3篇-洞察与解读
- 心肌梗死护理查房
- 不停跳冠脉搭桥术麻醉管理
- 模块七 直线的投影(课件)-中职高考《机械制图》一轮复习(高教版第5版)
- 谭政工作报告全文
- 江苏省南通市2025年七年级下学期语文期末模拟试卷四套及答案
- 国网 35kV~750kV输电线路绝缘子金具串通 用设计技术导则(试行)2024
- 统编版(2024)道德与法治一年级上册全册公开课一等奖创新教学设计
- 职业技术学院智能机器人技术专业人才培养方案
- 园林二级技师试题及答案
- 沟槽开挖支护施工方案
- 化工岗位操作纪律培训
评论
0/150
提交评论