




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章:第六章:本章内容字符串相关类(String、StringBuffer、StringBuilder)基本数据类型包装类Math类(不重要)File类枚举类本章内容字符串相关类(String、StringBuffeString类字符串是一个特殊的对象;字符串一旦初始化就不可以改变;Stringstr=“abc”;str是一个类类型变量,所以“abc“是一个对象。Stringstr1=newString(“abc”);有什么区别?Stringstr=“abc”;Stringstr1=newString(“abc”);System.out.println(s1==s2);System.out.println(s1.equals(s2));str在内存中有一个对象,str1在内存中有两个对象。String类复写了Object类中equals方法,该方法用于判断字符串内容是否相同。String类字符串是一个特殊的对象;StringstrString类java.lang.String类代表不可变的字符序列。“xxxxx”为该类的一个对象。String类是用于描述字符串事物,那么它就提供了多个方法对字符串进行操作。String类的常见构造方法:String(Stringoriginal)创建一个String对象为original的拷贝。String(char[]value)用一个字符数组创建一个String对象String(char[]value,intoffset,intcount)用一个字符数组从offset项开始的count个字符序列创建一个String对象String类是final的,不可能有子类,也就不可能被重写等。String类java.lang.String类代表不String类中常见的操作获取字符串中包含的字符数,也就是字符串的长度;intlength();根据位置获取位置上某个字符;charcharAt(intindex);根据字符获取该字符在字符中的位置;intindexof(intch);返回的是ch在字符串中第一次出现的位置。intindexof(intch,intfromIndex);返回的从fromIndex指定位置开始,获取ch在字符串出现的位置。lastIndexOf(Stringstr);lastIndexOf(Stringstr,intfromIndex)。判断字符串中是否包含某一个子串;contains(CharSequences)字符串是否有内容;isEmpty()字符串是否是以指定内容开头;startsWith(Stringprefix)字符串是否是以指定内容结尾;endsWith(Stringsuffix)判断字符串内容是否相同,它复写了Object类中的equals方法;equals(ObjectanObject)判断内容是否相同,并忽略大小写;compareToIgnoreCase(Stringstr);数组?思考:查找的指定字符不存在输出什么?查找的位置超出范围输出什么?String类中常见的操作获取数组?思考:查找的指定字符不存String类中常见的操作——转换将字符数组转成字符串;构造函数:String(char[]);String(char[]value,intoffset,intcount),分配一个新的String,它包含取自字符数组参数一个子数组的字符。静态方法:copyValueOf(char[]data);copyValueOf(char[]data,intoffset,intcount);返回指定数组中表示该字符序列的String。将字符串转成字符数组;char[]toCharArray();将字节数组转成字符串;String(byte[]);将字符串转成字节数组;byte[]getBytes;将基本数据类型转成字符串;staticStringvalueOf(int);3+“”等价于String.valueOf(3);特殊:字符串和字节数组在转换的过程中,可以指定编码表。String类中常见的操作——转换将字符数组转成字符串;String类练习String类练习练习一、二答案分析两功能的异同练习一、二答案分析两功能的异同练习三、四答案思考:1、用indexof()的另一种方法实现;2、能用split()切来实现吗?(No)练习三、四答案思考:String类中常见的操作——替换和切割replace(charoldChar,charnewChar);返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的;如果替换的字符串不存在,则返回的时原串;split(Stringregex);根据给定正则表达式的匹配拆分此字符串。Strings=“hellojava”;Strings1=s.replace(‘a’,’n’);System.out.println(s);System.out.println(s1);Strings=“java,c,vb,c++”;String[]arr=s.split(“,”);for(inti=1;i<arr.length;i++){System.out.println(arr[i]);}String类中常见的操作——替换和切割replace(chString类中常见的操作——其他子串:substring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串的一个子字符串。大小写转换:将字符串两端的多个空格去除对两个字符串进行自然顺序比较String类中常见的操作——其他子串:substring(String类举例(1)
publicclassTest{publicstaticvoidmain(String[]args){Strings1="hello";Strings2="world";Strings3="hello";System.out.println(s1==s3);//trues1=newString("hello");s2=newString("hello");System.out.println(s1==s2);//falseSystem.out.println(s1.equals(s2));//truecharc[]={'s','u','n','','j','a','v','a'};Strings4=newString(c);Strings5=newString(c,4,4);System.out.println(s4);//sunjavaSystem.out.println(s5);//java}}常量池中存在了字符串,就不需要再分配空间了。String类举例(1)
publicclassTString类常用方法(1)publiccharcharAt(intindex)返回字符串中第index个字符。publicintlength()返回字符串的长度。publicintindexOf(Stringstr)返回字符串中出现str的第一个位置publicintindexOf(Stringstr,intfromIndex)返回字符串中从fromIndex开始出现str的第一个位置publicbooleanequalsIgnoreCase(Stringanother)比较字符串与another是否一样(忽略大小写)publicStringreplace(charoldChar,charnewChar)在字符串中用newChar字符替换oldChar字符String类常用方法(1)publiccharchString类举例(2)
publicclassTest{publicstaticvoidmain(String[]args){Strings1="sunjava",s2="SunJava";System.out.println(s1.charAt(1));//uSystem.out.println(s2.length());//8System.out.println(s1.indexOf("java"));//4System.out.println(s1.indexOf("Java"));//-1System.out.println(s1.equals(s2));//falseSystem.out.println(s1.equalsIgnoreCase(s2));//trueStrings="我是程序员,我在学java";Stringsr=s.replace('我','你');System.out.println(sr);//你是程序员,你在学java}}String类举例(2)
publicclassTeString类常用方法(2)publicbooleanstartsWith(Stringprefix)判断字符串是否以prefix字符串开头publicbooleanendsWith(Stringsuffix)判断字符串是否以prefix字符串结尾publicStringtoUpperCase()返回一个字符串为该字符串的大写形式publicStringtoLowerCase()返回一个字符串为该字符串的小写形式publicStringsubstring(intbeginIndex)返回该字符串从beginIndex开始到结尾的子字符串publicStringsubstring(intbeginIndex,intendIndex)返回该字符串从beginIndex开始到endIndex结尾的子字符串publicStringtrim()返回将该字符串去掉开头和结尾空格后的字符串String类常用方法(2)publicbooleanString类举例(3)
publicclassTest{publicstaticvoidmain(String[]args){Strings="WelcometoJavaWorld!";Strings1="sunjava";System.out.println(s.startsWith("Welcome"));//trueSystem.out.println(s.endsWith("World"));//falseStringsL=s.toLowerCase();StringsU=s.toUpperCase();System.out.println(sL);//welcometojavaworld!System.out.println(sU);//WELCOMETOJAVAWORLD!StringsubS=s.substring(11);System.out.println(subS);//JavaWorld!Stringsp=s1.trim();System.out.println(sp);//sunjava}}String类举例(3)
publicclassTeString类常用方法(3)静态重载方法publicstaticStringvalueOf(…)可以将基本类型数据转换为字符串;例如:publicstaticStringvalueOf(doubled)publicstaticStringvalueOf(inti)………b+“”;方法publicString[]split(Stringregex)可以将一个字符串按照指定的分隔符分隔,返回分隔后的字符串数组。String类常用方法(3)静态重载方法String类举例(4)
publicclassTest{publicstaticvoidmain(String[]args){intj=1234567;StringsNumber=String.valueOf(j);//j+””System.out.println("j是"+sNumber.length()+"位数。");Strings="Mary,F,1976";String[]sPlit=s.split(",");for(inti=0;i<sPlit.length;i++){System.out.println(sPlit[i]);}}}输出结果:j是7位数。MaryF1976String类举例(4)
publicclassTe课堂练习课堂练习
1:编写一个程序,输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母数。
2:编写一个方法,输出在一个字符串中,指定字符串出现的次数。TestString.java课堂练习课堂练习1:编写一个程序,输ApacheCommonspublicstaticintcountMatches(String
str,String
sub)System.out.println(mons.lang.StringUtils.countMatches(s,"java"));ApacheCommonsSystem.out.prinStringBuffer类字符串的组成原理就是通过该类实现的StringBuffer可以对字符串内容进行增删StringBuffer是一个容器很多方法与String相同StringBuffer是字符缓冲区,而且长度可变,可以字节操作多个数据类型,最终会通过toString()方法变为字符串StringBuffer类字符串的组成原理就是通过该类实现的StringBuffer类中常见的操作存储StringBufferappend();将指定的数据作为参数添加到已有数据的结尾处;StringBuffersb=newStringBuffer();StringBuffersb1=sb.append(34);System.out.println(sb.toString());System.out.println(sb1.toString());输出结果是:?System.out.println(sb==sb1);输出结果是:?sb.append(“abc”).append(true).append(34);sb.insert(1,”qq”);StringBuffer类中常见的操作存储StringBufStringBuffer类中常见的操作删除StringBufferdelete(start,end);删除缓冲区中的数据;包含start,不包含end;StringBufferdeleteCharAt(index);删除指定位置的字符;//清空缓冲区sb.delete(0,sb.length());StringBuffer类中常见的操作删除//清空缓冲区StringBuffer类中常见的操作获取charAt(int
index);
返回此序列中指定索引处的char值。修改StringBufferreplace(intstart,intend,Stringstr);使用给定String中的字符替换此序列的子字符串中的字符。voidsetCharAt(intindex,charch);将给定索引处的字符设置为ch。反转reverse()将字符从此序列复制到目标字符数组dstgetChars(intsrcBegin,intsrcEnd,char[]dst,intdstBegin)
StringBuffer类中常见的操作获取StringBuffer类java.lang.StringBuffer代表可变的字符序列。StringBuffer和String类似,但StringBuffer可以对其字符串进行改变。StringBuffer类的常见构造方法:StringBuffer()创建一个不包含字符序列的“空”的StringBuffer对象。StringBuffer(Stringstr)创建一个StringBuffer对象,包含与String对象str相同的字符序列。StringBuffer类java.lang.StringStringBuffer常用方法(1)重载方法publicStringBufferappend(…)可以为该StringBuffer对象添加字符序列,返回添加后的该StringBuffer对象引用,例如:publicStringBufferappend(Stringstr)publicStringBufferappend(StringBuffersbuf)publicStringBufferappend(char[]str)publicStringBufferappend(char[]str,intoffset,intlen)publicStringBufferappend(doubled)publicStringBufferappend(Objectobj)………StringBuffer常用方法(1)重载方法publicStringBuffer常用方法(2)重载方法publicStringBufferinsert(…)可以为该StringBuffer对象在指定位置插入字符序列,返回修改后的该StringBuffer对象引用,例如:publicStringBufferinsert(intoffset,Stringstr)publicStringBufferinsert(intoffset,doubled)………方法
publicStringBufferdelete(intstart,intend)可以删除从start开始到end-1为止的一段字符序列,返回修改后的该StringBuffer对象引用。StringBuffer常用方法(2)重载方法publicStringBuffer常用方法(3)和String类含义类似的方法:publicintindexOf(Stringstr)publicintindexOf(Stringstr,intfromIndex)publicStringsubstring(intstart)publicStringsubstring(intstart,intend)publicintlength()方法
publicStringBufferreverse()用于将字符序列逆序,返回修改后的该StringBuffer对象引用。StringBuffer常用方法(3)和String类含StringBuffer类举例
publicclassTest{publicstaticvoidmain(String[]args){Strings="Mircosoft";char[]a={'a','b','c'};StringBuffersb1=newStringBuffer(s);sb1.append('/').append("IBM").append('/').append("Sun");System.out.println(sb1);StringBuffersb2=newStringBuffer("数字");for(inti=0;i<=9;i++){sb2.append(i);}System.out.println(sb2);sb2.delete(8,sb2.length()).insert(0,a);System.out.println(sb2);System.out.println(sb2.reverse());}}输出结果:Mircosoft/IBM/Sun数字0123456789abc数字012345543210字数cbaStringBuffer类举例
publicclassTStringBuilderJDK1.5版本之后出现了StringBuilderStringBuffer是线程同步;但效率低;StringBuilder是线程不同步;建议使用;升级三个因素:提高效率简化书写提高安全性StringBuilderJDK1.5版本之后出现了Stri基本数据类型对象包装类包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作。作用:用于基本数据类型和字符串类型之间转换;基本数据类型转成字符串:基本数据类型+“”;基本数据类型包装类.toString(基本数据类型值);字符串转成基本数据类型:基本数据类型包装类.parse基本数据类型包装类(字符串);十进制转成其他进制:toBinaryString()toHexString()toOctalString()其他进制转成十进制parseInt(string,radix)以java.lang.Integer类为例;构造方法:Integer(intvalue)Integer(Strings)
基本类型对象包装类byteByteshortShortintInteger
longLong
booleanBoolean
floatFloat
doubleDouble
characterCharacter基本数据类型对象包装类包装类(如:Integer,Doubl包装类常见方法以下方法以java.lang.Integer为例publicstaticfinalintMAX_VALUE最大的int型数(231-1)publicstaticfinalintMIN_VALUE最小的int型数(-231)publiclonglongValue()返回封装数据的long型值publicdoubledoubleValue()返回封装数据的double型值publicintintValue()返回封装数据的int型值publicstaticintparseInt(Strings)throwsNumberFormatException将字符串解析成int型数据,返回该数据publicstaticIntegervalueOf(Strings)throwsNumberFormatException返回Integer对象,其中封装的整型数据为字符串s所表示。TestPrimitive.java包装类常见方法以下方法以java.lang.Integer为新特性新特性课堂练习课堂练习
编写一个方法,返回一个double型二维数组,数组中的元素通过解析字符串参数获得。如字符串参数:“1,2;3,4,5;6,7,8”对应的数组为:d[0,0]=1.0d[0,1]=2.0d[1,0]=3.0d[1,1]=4.0d[1,2]=5.0d[2,0]=6.0d[2,1]=7.0d[2,2]=8.0
ArrayParser.java课堂练习课堂练习编写一个方法,返回一个Math类java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。
abs绝对值
acos,asin,atan,cos,sin,tansqrt平方根
pow(doublea,doubleb)a的b次幂
log自然对数
expe为底指数
max(doublea,doubleb)min(doublea,doubleb)random()返回0.0到1.0的随机数
longround(doublea)double型的数据a转换为long型(四舍五入)
toDegrees(doubleangrad)弧度->角度
toRadians(doubleangdeg)角度->弧度Math类java.lang.Math提供了一系列静态方法用
publicclassTest{publicstaticvoidmain(String[]args){doublea=Math.random();doubleb=Math.random();System.out.println(Math.sqrt(a*a+b*b));System.out.println(Math.pow(a,8));System.out.println(Math.round(b));System.out.println(Math.log(Math.pow(Math.E,15)));doubled=60.0,r=Math.PI/4;System.out.println(Math.toRadians(d));System.out.println(Math.toDegrees(r));}}输出结果:0.227248547678212043.05976E-10015.01.6597645.0Math类举例
publicclassTest{输出结果:0.227File类java.io.File类代表系统文件名(路径或文件名)。File类的常见构造方法:publicpathname)以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。File的静态属性Stringseparator存储了当前系统的路径分隔符。通过File对象可以访问文件的属性。
publicbooleancanRead()publicbooleancanWrite()
publicbooleanexists()publicbooleanisDirectory()
publicbooleanisFile()publicbooleanisHidden()
publiclonglastModified()publiclonglength()
publicStringgetName()publicStringgetPath()通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)。publicbooleancreateNewFile()throwsIOExceptionpublicbooleandelete()publicbooleanmkdir()TestListFile类java.io.File类代表系统文件名(路径或课堂练习课堂练习
编写一个程序,在命令行中以树状结构展现特定的文件夹及其子文件(夹)
课堂练习课堂练习编写一个程序,在命令行补充:java.lang.Enum枚举类型枚举类型:只能够取特定值中的一个使用enum关键字是java.lang.Enum类型TestEnum.java补充:java.lang.Enum枚举类型枚举类型:Test总结String正则表达式基础类型包装类MathFile递归枚举类型ApacheCommons总结String第七章:容器/集合第七章:容器/集合本章内容容器的概念容器APICollection接口Iterator接口增强的for循环Set接口List接口和Comparable接口Collections类Map接口自动打包/解包泛型(JDK1.5新增)本章内容容器的概念集合类为什么出现集合类?面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式;数组和集合类同是容器,有何不同?数组虽然也可以存储对象,但长度是固定的,而集合长度是可变的;数组中可以存储基本数据类型,而集合只能存储对象;集合类的特点集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象;集合类为什么出现集合类?容器的概念阅读如下程序:publicclassName{privateStringfirstName,lastName;publicName(StringfirstName,StringlastName){this.firstName=firstName;this.lastName=lastName;}publicStringgetFirstName(){returnfirstName;}publicStringgetLastName(){returnlastName;}publicStringtoString(){returnfirstName+""+lastName;}}publicclassTest{publicstaticvoidmain(Stringarg[]){Namename1=newName("f1","l1");Namename2=newName("f2","l2");Namename3=newName("f3","l3"); ………}}容器:
JavaAPI所提供的一系列类的实例,用于在程序中存放对象。容器的概念阅读如下程序:publicclassTest容器APIJ2SDK所提供的容器API位于java.util包内。容器API的类图结构如下图所示:1图1类3知识点6接口没有顺序不可重复有顺序可以重复容器APIJ2SDK所提供的容器API位于java.ut容器APICollection接口-定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。Set中的数据对象没有顺序且不可以重复。List中的数据对象有顺序且可以重复。(即互相equals)Map接口定义了存储“键(key)-值(value)映射对”的方法。容器APICollection接口-定义了存取一组对象的Collection接口Collection接口中所定义的方法:
intsize();booleanisEmpty();voidclear();booleancontains(Objectelement);//equalsbooleanadd(Objectelement);booleanremove(Objectelement);Iteratoriterator();booleancontainsAll(Collectionc);booleanaddAll(Collectionc);booleanremoveAll(Collectionc);booleanretainAll(Collectionc);//求交集Object[]toArray();Collection接口Collection接口中所定义Collection方法举例
importjava.util.*;publicclassTest{publicstaticvoidmain(String[]args){Collectionc=newArrayList();//可以放入不同类型的对象c.add("hello");c.add(newName("f1","l1"));c.add(newInteger(100));System.out.println(c.size());System.out.println(c);}}输出结果:3[hello,f1l1,100]TestArrayList.javaCollection方法举例
importjava.utArrayList为什么有两个remove方法?ArrayList为什么有两个remove方法?remove(intindex)是子类新添加的!如果是父类引用指向子类对象,则找不到子类中新添加的方法。要想调用子类新添加的方法,需要先转型是优先自动打包呢?还是先去匹配方法?ArrayList为什么有两个remove方法?ArrayLc“hello”c“hello”Map接口实现Map接口的类用来存储键-值对。Map接口的实现类有HashMap和TreeMap等。Map类中存储的键-值对通过键来标识,所以键值不能重复。
Objectput(Objectkey,Objectvalue);Objectget(Objectkey);Objectremove(Objectkey);booleancontainsKey(Objectkey);booleancontainsValue(Objectvalue);intsize();booleanisEmpty();voidputAll(Mapt);voidclear();TestMap.javaEquals!所以要比较
hashcodeMap接口实现Map接口的类用来存储键-值对。
ObjehashCode一个对象被当作Map里面的key的时候,hashCode用来比较两个对象是不是相等hashCode非常适合用来做索引hashCode的常规协定重写equals方法,通常需要重写hashCode方法.因为你的本意是想让他相等的.但hashCode如果不重写,不同的对象就不会相等Hashcode被谁调用了?什么时候调用的?hashCode一个对象被当作Map里面的key的时候,haCollection方法举例
importjava.util.*;publicclassTest{publicstaticvoidmain(String[]args){Collectionc=newHashSet();c.add("hello");c.add(newName("f1","l1"));c.add(newInteger(100));c.remove("hello");c.remove(newInteger(100));System.out.println(c.remove(newName("f1","l1")));System.out.println(c);}}输出结果:false[f1l1]BasicContainer.javaCollection方法举例
importjava.utHashSet底层用HashMap来实现。往HashSet里面放对象,同样需要重写hashcode方法HashSet底层用HashMap来实现。Collection方法举例publicbooleanequals(Objectobj){if(objinstanceofName){Namename=(Name)obj;return(firstName.equals(name.firstName))&&(lastName.equals(name.lastName));}returnsuper.equals(obj);}publicinthashCode(){returnfirstName.hashCode();}容器类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode(hash容器)方法;对于自定义的类型,需要要重写equals和hashCode方法以实现自定义的对象相等规则。注意:相等的对象应该具有相等的hashcodes。增加Name类的equals和hashCode方法如下:Collection方法举例publicbooleanjava实用教程C课件Collection方法举例使用更新的Name类,运行下列程序:
importjava.util.*;publicclassTest{publicstaticvoidmain(String[]args){Collectionc=newLinkedList();c.add(newName("f1","l1"));c.add(newName("f2","l2"));System.out.println(c.contains(newName("f2","l2")));c.remove(newName("f1","l1"));System.out.println(c);}}输出结果:true[f2l2]Collection方法举例使用更新的Name类,运行下列Iterator接口所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。Iterator接口定义了如下方法:EnumerationArrayList-Vector
booleanhasNext();//判断游标右边是否有元素Objectnext();//返回游标右边的元素并将游标移动到下一个位置voidremove();//删除游标左面的元素,在执行完next之后该//操作只能执行一次游标Next()元素Iterator接口所有实现了Collection接口的容Iterator方法举例
importjava.util.*;publicclassTest{publicstaticvoidmain(String[]args){Collectionc=newHashSet();c.add(newName("f1","l1"));c.add(newName("f2","l2"));c.add(newName("f3","l3"));Iteratori=c.iterator();while(i.hasNext()){//next()的返回值为Object类型,需要转换为相应类型Namen=(Name)i.next();System.out.print(n.getFirstName()+"");}}}输出结果:f2f1f3Iterator方法举例
importjava.utilstart=0I=0I=1I=2arr(1)rotate(0)1,2,3start=1ii=1rotate(1)arr(2)ii=2rotate(1)start=0I=0I=1I=2arr(1)Iterator方法举例Iterator对象的remove方法是在迭代过程中删除元素的唯一的安全方法。………Collectionc=newHashSet();c.add(newName("fff1","lll1"));c.add(newName("f2","l2"));c.add(newName("fff3","lll3"));for(Iteratori=c.iterator();i.hasNext();){Namename=(Name)i.next();if(name.getFirstName().length()<3){i.remove();//如果换成c.remove(name);会产生例外}}System.out.println(c);输出结果:[fff3lll3,fff1lll1]Iterator方法举例Iterator对象的remove补充:JDK1.5增强的for循环增强的for循环对于遍历array或Collection的时候相当简便示例EnhancedFor.java缺陷:数组:不能方便的访问下标值集合:与使用Iterator相比,不能方便的删除集合中的内容总结:除了简单遍历并读出其中的内容外,不建议使用增强forEnhancedFor.java补充:JDK1.5增强的for循环增强的for循环对于遍历aSet接口Set接口是Collection的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素是没有有顺序的,而且不可以重复。Set容器可以与数学中“集合”的概念相对应。J2SDKAPI中所提供的Set容器类有HashSet,TreeSet等。Set接口Set接口是Collection的子接口,SeSet方法举例publicstaticvoidmain(String[]args){Sets=newHashSet();s.add("hello");s.add("world");s.add(newName("f1","f2"));s.add(newInteger(100));s.add(newName("f1","f2"));//相同元素不会被加入s.add("hello");//相同的元素不会被加入System.out.println(s);}输出结果:[100,hello,world,f1f2]Set方法举例publicstaticvoidmaiSet方法举例
publicstaticvoidmain(String[]args){Sets1=newHashSet();Sets2=newHashSet();s1.add("a");s1.add("b");s1.add("c");s2.add("d");s2.add("a");s2.add("b");//Set和List容器类都具有Constructor(Collectionc)//构造方法用以初始化容器类Setsn=newHashSet(s1);sn.retainAll(s2);//求交集Setsu=newHashSet(s1);su.addAll(s2);System.out.println(sn);System.out.println(su);}输出结果:[a,b][d,a,c,b]Set方法举例
publicstaticvoidmaList接口List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复。List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。J2SDK所提供的List容器类有ArrayList,LinkedList等。Objectget(intindex);Objectset(intindex,Objectelement);//返回旧的元素
voidadd(intindex,Objectelement);Objectremove(intindex);intindexOf(Objecto);intlastIndexOf(Objecto);List接口List接口是Collection的子接口,实List方法举例
Listl1=newLinkedList();for(inti=0;i<=5;i++){l1.add("a"+i);}System.out.println(l1);l1.add(3,"a100");System.out.println(l1);l1.set(6,"a200");System.out.println(l1);System.out.print((String)l1.get(2)+““);System.out.println(l1.indexOf("a3"));l1.remove(1);System.out.println(l1);输出结果:[a0,a1,a2,a3,a4,a5][a0,a1,a2,a100,a3,a4,a5][a0,a1,a2,a100,a3,a4,a200]a24[a0,a2,a100,a3,a4,a200]List方法举例
Listl1=newLinked类java.util.Collections提供了一些静态方法实现了基于List容器的一些常用算法。List常用算法
voidsort(List)对List容器内的元素排序voidshuffle(List)对List容器内的对象进行随机排列voidreverse(List)对List容器内的对象进行逆续排列
voidfill(List,Object)用一个特定的对象重写整个List容器voidcopy(Listdest,Listsrc)将srcList容器内容拷贝到destList容器intbinarySearch(List,Object)对于顺序的List容器,采用折半查找的方法查找特定对象
类java.util.Collections提供了一些静输出结果:[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9][a1,a3,a8,a9,a4,a6,a5,a2,a0,a7][a7,a0,a2,a5,a6,a4,a9,a8,a3,a1][a0,a1,a2,a3,a4,a5,a6,a7,a8,a9]5
Listl1=newLinkedList();Listl2=newLinkedList();for(inti=0;i<=9;i++){l1.add("a"+i);}System.out.println(l1);Collections.shuffle(l1);//随机排列System.out.println(l1);Collections.reverse(l1);//逆续System.out.println(l1);Collections.sort(l1);//排序System.out.println(l1);System.out.println(Collections.binarySearch(l1,“a5”));//折半查找List常用算法举例输出结果:[a0,a1,a2,a3,a4,a5,数组的常用算法Java.util.Arrays数组的常用算法Java.util.ArraysComparable接口问题:上面的算法根据什么确定容器中对象的“大小”顺序?所有可以“排序”的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法publicintcompareTo(Objectobj);该方法:返回0表示this==obj返回正数表示this>obj返回负数表示this<obj实现了Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式。Comparable接口问题:上面的算法根据什么确定容器中Comparable接口改写Name类让其实现Comparable接口,其compareTo方法定义为:classNameimplementsComparable{………publicintcompareTo(Objecto){Namen=(Name)o;intlastCmp=lastNpareTo(n.lastName);return(lastCmp!=0?lastCmp:firstNpareTo(n.firstName));}}BasicContainer.javaComparable接口改写Name类让其实现CoComparable接口使用新的Name类运行下列程序:Listl1=newLinkedList();l1.add(newName("Karl","M"));l1.add(newName("Steven","Lee"));l1.add(newName("John","O"));l1.add(newName("Tom","M"));System.out.println(l1);Collections.sort(l1);System.out.println(l1);输出结果:[KarlM,StevenLee,JohnO,TomM][StevenLee,KarlM,TomM,JohnO]BasicContainer.javaComparable接口使用新的Name类运行下列程如何选择数据结构*Array读快改慢Linked改快读慢Hash搜索极快,遍历极慢Tree插入/搜索都比较快,适合做索引53814979876如何选择数据结构*Array读快改慢53814979876java实用教程C课件Auto-boxing/unboxing在合适的时机自动打包、解包自动将基础类型转换为对象自动将对象转换为基础类型inta=12;Integerb=Integer.valueOf(a);intc=Value();inta=12;Integerb=a;intc=b;TestMap2.javaTestAutoboxing.javaAuto-boxing/unboxing在合适的时机自动打包补充:JDK1.5泛型起因:JDK1.4以前类型不明确:装入集合的类型都被当作Object对待,从而失去自己的实际类型。从集合中取出时往往需要转型,效率低,容易产生错误。解决办法:在定义集合的时候同时定义集合中对象的类型示例:BasicGeneric.java可以在定义Collection的时候指定也可以在循环时用Iterator指定好处:增强程序的可读性和稳定性BasicGeneric.java补充:JDK1.5泛型起因:BasicGeneric.javTestMap.javaTestArgsWords.javaBasicGeneric.javaTestMap2.java--》泛型TestArgsWords.java--》泛型课堂练习TestMap.java课堂练习为什么set中的元素不能重复add方法实际执行的是map的方法,并且我们添加的对象是map中的keyvalue是执行的同一个对象PRESENT.因为map中的key是不允许重复的,所以set中的元素不能重复。
privatetransientHashMap<E,Object>map;privatestaticfinalObjectPRESENT=newObject();publicbooleanadd(Eo){ returnmap.put(o,PRESENT)==null;}为什么set中的元素不能重复add方法实际执行的是map总结JavaCollectionsFramework一个图Set无序,不可重复
/List有序,可以重复
/Map两个类:JCF框架中还有两个很实用的公用类:Collections和ArraysCollections提供了对一个Collection容器进行诸如排序、复制、查找和填充等方法Arrays提供了数组的填充,查找,比较,排序等一系列的对数组的操作三个知识点EnhancedFor不重要Generic范型增强程序的可读性和稳定性Auto-boxing/unboxing谨慎使用六个接口CollectionSetListMapComparableIterator注意:重写equals和hashCode方法BasicContainer.javaTestAutoboxing.java总结JavaCollectionsFramework注意classTest1{inti=0;Test1(inti){this.i=i;}}public
classMyTestextendsTest1{public
static
voidmain(String[]args){newTest1(9);}}classTest1{Map怎么遍历为什么是3遍,hashcode,equals,equals重写equals(),注意用object,用具体的类就不行了Map怎么遍历第八章:流第八章:流本章内容Java流式输入/输出原理Java流类的分类输入/输出流类常见的节点流和处理流文件流缓冲流数据流转换流Print流Object流NIO简介本章内容Java流式输入/输出原理Java流式输入/输出原理在Java程序中,对于数据的输入/输出操作以“流”(stream)方式进行;J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。文件00101………程序文件………00101程序网路连接程序0010111………程序程序010…010…文件010…程序“hello”Java流式输入/输出原理在Java程序中,对于数据的输入/流是一个很形象的概念流是一个很形象的概念输入/输出流的分类
java.io
包中定义了多个流类型(类或抽象类)来实现输入/输出功能;可以从不同的角度对其进行分类:按数据流的方向不同可以分为输入流和输出流。(以程序的角度来考虑)按处理数据单位不同可以分为字节流和字符流。按照功能不同可以分为节点流和处理流。J2SDK所提供的所有流类型位于包java.io内都分别继承自以下四种抽象流类型。字节流字符流输入流InputStreamReader输出流OutputStreamWriter输入/输出流的分类java.io包中定义了多个流类型(节点流和处理流节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)数据源程序处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。节点流数据源数据源程序程序节点流和处理流节点流为可以从一个特定的数据源(节点)读写数据InputStream继承自InputSteam的流都是用于向程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。InputStream继承自InputSteam的流都是用于InputStream的基本方法//读取一个字节并以整数的形式返回(0~255),//如果返回-1已到输入流的末尾。intread()throwsIOException//读取一系列字节并存储到一个数组buffer,//返回实际读取的字节数,如果读取前已到输入流的末尾返回-1intread(byte[]buffer)throwsIOException//读取length个字节//并存储到一个字节数组buffer,从off位置开始存,最多len//返回实际读取的字节数,如果读取前以到输入流的末尾返回-1intread(byte[]buffer,intoff,intlen)throwsIOException//关闭流释放内存资源voidclose()throwsIOExceptionInputStream的基本方法//读取一个字节并以整数的形OutputStream继承自OutputSteam的流是用于程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。OutputStream继承自OutputSteam的流是用OutputStream的基本方法//向输出流中写入一个字节数据,该字节数据为参数b的低8位voidwrite(intb)throwsIOException//将一个字节类型的数组中的数据写入输出流voidwrite(byte[]b)throwsIOException//将一个字节类型的数组中的从指定位置(off)开始的//len个字节写入到输出流voidwrite(byte[]b,intoff,intlen)throwsIOException//关闭流释放内存资源voidclose()throwsIOException//将输出流中缓冲的数据全部写出到目的地voidflush()throwsIOException良好的编程习
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 滴滴代驾行业培训
- 2025年个人农机工作方案
- 2025年世界卫生日活动策划方案
- 2025年乡政府个人工作方案
- 2025年社区方案生育年终总结
- 产妇膳食营养课件
- 2025年幼儿园小班班务工作方案参考
- 2025年化妆品营销策划方案
- 2025年妇幼工作方案
- 2025年低级硬笔书法教学方案
- 民兵反恐维稳培训
- 《混凝土工程与技术》课程教学大纲
- 2025年单相电子电能表项目可行性研究报告
- 2025年人教五四新版八年级数学上册阶段测试试卷
- 公路护坡施工合同
- 2025年广东省财政厅所属事业单位公开招聘历年高频重点提升(共500题)附带答案详解
- 供热管网施工技术培训
- 广东广州市榄核咨询服务有限公司招聘笔试冲刺题2024
- 手办联名合作协议
- 高速公路路产赔(补)偿收费标准表
- 节能管理制度
评论
0/150
提交评论