Java工具类及常用算法_第1页
Java工具类及常用算法_第2页
Java工具类及常用算法_第3页
Java工具类及常用算法_第4页
Java工具类及常用算法_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

Object类Object类是Java程序或类库中所有类的直接或间接父类,所有对象(包括数组)都实现这个类的方法Object类扩大了方法的适用范围,例

Voidfun(Objecto)可以将任意类型的对象传递给它Object类中的主要方法介绍1Object类Wait():当一个线程执行了一个对象的wait()方法时,该线程就会处于该对象的等待池中Notify():当一个线程执行了一个对象的notify方法时,就会唤醒该对象等待池中一个线程notifyAll():当一个线程执行了一个对象的notify方法时,就会唤醒该对象等待池中所有线程2Object类protectednativeObjectclone()throwsCloneNotSupportedException;生成当前对象的一个备份应用clone()方法 参见mypack2.TestClone1.java应用该方法的对象必须实现Cloneable接口,否则异常。必须重写clone()方法。在该方法中必须使用super.clone();注意shallowclone与deepclone:mypack2.TestClone2.java3Equals()方法提供对象是否“==”的判断Object类的equals方法实现

publicbooleanequals(Objecto){ returnthis==o; }但包装类,String类等覆盖了该方法,只要类型一致,状态和行为相等就视为相等hashCode()返回对象的散列值Object类的hashCode方法实现是将对象内存地址转换成一个整数,所以,不同对象的散列值不同。Object类4对象的toString方法返回对象的文本表示。Object类的实现:

publicStringtoString(){

returngetClass().getName()+'@'+Integer.toHexString(hashCode());

}但包装类,String,StringBuffer类都覆盖了toString方法,返回具有更加实际意义的内容Object类5publicfinalclassClass<T>extendsObjectT:由此Class对象建模的类的类型。例如,String.class

的类型是Class<String>Class类对象表示正在运行的Java应用程序中的类和接口Class类对象是在Jvm装载类时创建通过Class对象可以获得对象的域、方法等信息。这种获得运行时对象信息的方法又称为反射(Reflection)参见mypack1.RunTimeClassInfo.javaClass类6包装类是基本类型的面向对象的代表(int,Integer)每个基本数据类型都对应一个包装类包装类提供了对象相等判断和大小判断包装类对象封装的数据不可更改(immutable),若要更改则需重新生成新的对象参见例7-4:DoubleAndString.javaWrapperclasses包装类7包装类列表8数学类提供常见的指数运算,对数运算,三角函数运算等数学运算Math类是final的Math类的构造方法是private的Math类提供的方法都是静态的常用的方法有:

absrandommaxminroundfloorceillogexpsqrt

pow

三角函数等参见例7-5:TestMath.javaMath类

9System类publicfinalclassSystemextendsObjectPublicstaticfinal

InputStream

in:

“标准”输入流Publicstatic

finalPrintStream

out:

“标准”输出流Publicstatic

finalPrintStream

err:

“标准”错误输出流Charc=System.in.read();System.out.println(“hello”);10System类PublicstaticlongcurrentTimeMillis()Publicstaticvoidexit(intstatus)Publicstaticvoidgc()PublicstaticPropertiesgetProperties()详细情况请参见Jdk

api.11Java中,字符串都是用类的对象来实现的两类字符串String:创建后不会再做修改或变动的字符串常量StringBuffer:创建后允许再做更改和变化的字符串字符串类12String类String中的equals()方法覆盖了Object的equals()方法,只要内容相同就返回true.由于字符串对象的大量使用,Java中为了节省内存空间和运行时间,在编译阶段就把所有的字符串文字放到一个文字池中,其中所有相同的字符串常量被合并,只占用一个空间。13String类Strings1="abc";

Strings2="abc";

if(s1==s2)

System.out.println("s1,s2refertothesameobject");

else

System.out.println(“s1,s2refertothedifferentobject");问题:共创建了几个StringObject?14String类Strings3=newString(“def”);Strings4=newString(“def”);问题:共创建了几个StringObject?S3==s4?15String类常见的字符串赋值方法例7-6:StringAssign.java常见的字符串方法应用例7-7:TestStringMethod.java16String类在字符串中检索特定字符或子字符串,如果找到,则返回匹配成功的位置,否则返回-1indexOf():从字符串的首位开始查找lastIndexOf():从字符串的末尾开始查找Stringstr=“HelloHelloHello”;System.out.println(str.indexOf(‘e’));//1System.out.println(str.indexOf(‘e’,2));//6System.out.println(str.lastIndexOf(‘e’));//11System.out.println(str.indexOf(“ello”,2));//6System.out.println(str.lastIndexOf(“Hello”),11);//5System.out.println(str.indexOf(“Ello”));//-117String类Concat(String

str):把字符串str附加在当前字符串的末尾Strings1=“Hello”;Strings2=s1.concat(“World”);System.out.println(s1);//HelloSystem.out.println(s2);//HelloWorld上述concat()方法并不会改变s1本身的内容18String类subString():返回字符串的一个子字符串PublicStringsubString(int

beginIndex):子串起始位置beginIndex,结束位置为字符串长度-1PublicStringsubString(int

beginIndex,int

endIndex):子串起始位置beginIndex,结束位置endIndex-1Stringstr=“0123456”;Stringsub1=str.subString(2);//23456Stringsub2=str.subString(2,5);//23419Astringbufferimplementsamutablesequenceofcharacters。以缓冲区的形式存储管理字符串数据,而不象String那样是immutable,如果频繁地对某个字符串数据进行处理,那么应该选择StringBuffer,因为它封装的数据是可变的。字符串缓冲区的长度是可变的,它的增长策略是将原来的长度翻倍再加2。常用的方法有insert,append,substring"a"+4+"b"会被编译器解释为

newStringBuffer().append("a")

.append(4).append("b").toString()StringBuffer类20StringBuffer类Append():StringBuffer

sb=newStringBuffer();Sb.append(“Hello”);Sb.append(“World”);System.out.println(sb);//HelloWorldInsert():StringBuffer

sb=newStringBuffer(“0456”);Sb.insert(1,”123”);System.out.println(sb);//012345621String与StringBuffer的区别String类不可编辑,StringBuffer类可编辑Strings1=newString(“abc”);S1.concat(“def”);StringBuffersb1=newStringBuffer(“abc”);Sb1.append(“def”);System.out.println(s1);//abcSystem.out.println(sb1);//abcdef画出其存储空间22StringTokenizer类Java.util.StringTokenizer类提供了对字符串进行解析和分解的功能StringTokenizer(String

str)StringTokenizer(String

str,String

delim)StringTokenizer(String

str,String

delim,boolean

returnDelims)见TestStringTokenizer.java23集合对象就是一组对象的表示,即用一个对象代表一组对象。集合中每个对象称为集合的一个元素集合与数组的区别:集合中的元素都是对象的引用,基本数据类型要使用其包装类才能作为集合的元素,集合中各个元素的具体类型可以不同,只要是从相同的类派生而来就行集合类库CollectionAPI24集合的分类Java集合主要分为三种:Set(集):集合中的元素不按特定方式排序,并且没有重复对象List(列表):集合中的元素按照索引位置排序,可以有重复元素,允许按照元素在集合中的索引位置检索元素。与数组相似Map(映射):集合中的每个元素包含一对键-值对(key-value),集合中没有重复的键对象,值对象可以重复25Collection接口Collection是Collection层次结构中的根接口。Collection表示一组对象,一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。JDK不提供此接口的任何直接实现:它提供更具体的子接口(如Set和List)实现。Java集合框架给出了几个简单通用的集合定义,它们在java.util包中2627Set接口及HashSet类Set接口是Collection的子接口,不记录元素的顺序,元素不可重复HashSet是实现Set接口的一个类,该类按照哈希算法来存取集合中的对象,存取速度较快Set表示的是不重复(a.equals(b))的元素的集合Set中可以包含null对象,但最多只能有一个null对象28Set接口及HashSet类Set<String>set=newHashSet<String>();Strings1=newString(“hello”);Strings2=s1;Strings3=newString(“world”);set.add(s1);set.add(s2);set.add(s3);System.out.println(set.size());//?参见Mypack1.TestHashSet.java29List接口及ArrayList,Vector及LinkedList类List接口是Collection的子接口,其元素以线性方式存储,且允许有重复元素ArrayList,LinkedList,Vector是List接口的重要实现,是Java中的“动态数组”,元素可以加入和移除ArrayList与Vector类似,区别是:Vector是线程安全的(synchronized)30ArrayListArrayList代表长度可变的数组,允许对元素进行快速的随机访问,但是插入与删除元素的速度较慢参见mypack1.TestArrayList.java31LinkedListLinkedList在实现中采用链表数据结构,插入删除元素的速度较快,随机访问则相对较慢,可作为堆栈、队列使用LinkedList实现队列:参见 mypack1.TestQueue.java32Vector向量Vector是java.util包中用来存放不同类型元素的变长数组其中的元素不能是简单数据类型,如int等PublicVector(int

initCapacity,int

capacityIncrement)addElement(Object

obj)insertElement(Object,intindex)setElementAt(Object

obj,intindex)BooleanremoveElement(Object

obj)33Vector向量VoidremoveElementAt(intindex)VoidremoveAllElement()ObjectelementAt(intindex)Int

indexOf(Object

obj,int

start_index)Int

lastIndexOf(Object

obj,int

start_index)见PhotoAlbum.javaStack是Vector的子类,故栈中对象都是Object对象或是其子类对象见mypack1.Stacks.java34接口Iterator(迭代器)和Enumeration(枚举器)都是用来存取集合中元素的,建议用前者见mypack1.TestListAllElements.java列举器Iterator&Enumeration35Map接口和Hashtable类Map接口是将键映射到值的对象。一个映射不能包含重复的键,每个键最多只能映射到一个值。Objectget(Objectkey)Objectput(Object

key,Objectvalue)Map接口的重要实现类有:Hashtable,HashMap,TreeMap,Properties等。其中,Properties是Hashtable的子类,其关键字及值都限于String类见TestHashtable.java36HashMap&Hashtable二者皆提供Map接口的实现。HashMap是未同步的集合,Hashtable是同步的集合。Hashtable不接受null作为key或者value。HashMap接受null作为key或者value。37Collections类Java.util.Collections类是一个针对List具有排序、查找、反序等功能的类Publicstaticvoidsort(Listlist)Publicstaticvoidsort(List

list,Comparatorc)Publicstaticint

binarySearch(List

list,Objectkey)Publicstaticint

binarySearch(List

list,Object

key,Comparatorc)Note:对于binarySearch要求list已按升序排好38Collections类比较规则:若不提供Comparator,则List中的对象必须实现java.lang.Comparable接口(int

compareTo(Object

obj);根据大小关系比较)提供Comparator:Int

compare(Objecto1,Objecto2)Booleanequals(Object

obj)Referencetomypack2.TestCollectionsSort.java39Generic泛型Generic是Jdk1.5新增加的Java语言特性适用场合:集合中所有元素都是同一种类型Vectorv=newVector();V.addElement(“one”);

v.addElement(new

Person(“me”));Strings=(String)v.elementAt(0);不能保证插入的元素都是同种类型元素取出时必须做强制类型转换40Generic泛型采用泛型的情况:Vector<String>v=newVector<String>();V.addE

温馨提示

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

评论

0/150

提交评论