JAVA初高級經(jīng)典小程序_第1頁
JAVA初高級經(jīng)典小程序_第2頁
JAVA初高級經(jīng)典小程序_第3頁
JAVA初高級經(jīng)典小程序_第4頁
免費預(yù)覽已結(jié)束,剩余30頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1.編寫程序,判斷給定的某個年份是否是閏年。閏年的判斷規(guī)則如下:(1)若某個年份能被4整除但不能被100整除,則是閏年。(2)若某個年份能被400整除,則也是閏年。從命令行接受一個參數(shù)年份,計算此年份是否為閏年?importjava.util.*;publicclassHao4{publicstaticvoidmain(Stringargs[]){Scannerscan=newScanner(System.in);System.out.print("輸出數(shù)據(jù):intnum=scan.nextlntf);print(num);)publicstaticvoidprint(intnum){if(num%4==0&&(num%100)!=0||num%400==0){System.out.println("今年是閏年:"+num);)else{System.out.println("今年不是閏年:"+num);))};2.給定一個百分制的分數(shù),輸出相應(yīng)的等級。90分以上 A級80~89 B級70~79 C級60~69 D級60分以下 E級importjava.util.*;publicclassHaoll{publicstaticvoidmain(Stringargs[]){Scannerscan=newScanner(System.in);while(true){System.out.print("輸出數(shù)據(jù):");intnum=scan.nextlnt();print(num);}}publicstaticvoidprint(intnum){intnuml=num/10;switch(numl){case10:System.out.println("A級");break;case9:System.out.println("A級");break;case8:System.out.println(HB級”);break;case7:System.out.println("C級");break;case6:System.out.println("D^");break;default:System.out.println("E級”);)}};3.編寫程序求1+3+5+7+……+99的和值。publicclassHao4(publicstaticvoidmain(Stringargs[]){System.out.println(print(50));}publicstaticintprint(intnum){if(num==l){return1;)intnuml;numl=num*2-l;returnnuml+print(num-l);|「練習(xí)一:利用for循環(huán)打印9*9表?1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81publicclassIIao4{publicstaticvoidmain(Stringargs[]){for(inti=l;i<=9;i++){for(intj=l;j<=i;j++){System,out.print(j+/z**+i+*=*+i*j+*");)System,out.print('\n");練習(xí)七:求2/1+3/2+5/3+8/5+13/8前20項之和?publicclassHao4(publicstaticvoidmain(Stringargs[]){doublex=2.0;doubley=1.0;doublesum=0.0;for(inti=0;i<20;i++){sum+=x/y;y=x;x+=y;}System.out.println(sum);)}練習(xí)ハ:利用程序輸出如下圖形:*************************publicclassHao4(publicstaticvoidmain(Stringargs[]){for(inti=l;i<8;i++){intk=l;if(i<5){k=2*i-l;}else{k=13-2*i;|for(intj=l;j<=k;j++){System.out.print("*");)System.out.println();)}}.定義ー個int型的ー維數(shù)組,包含10個元素,分別賦ー些隨機整數(shù),然后求出所有元素的最大值,最小值,平均值,和值,并輸出出來。publicclassHao4(publicstaticvoidmain(Stringargs[]){intarr[]=newint[10];for(inti=O;i<arr.length;i++){arr[i]=(int)(100*Math.random());System.out.print(arr[i]+'*n);}System.out.println();intmax=arr[0];intmin=arr[0];intsum=0;for(inti=O;i<arr.length;i++){if(max<arr[i]){max=arr[i];}if(min>arr[i]){min=arr[i];)sum+=arr[i];}System.out.println("MAX="+max+"/MIN="+min+"/SUM=,,+sum+',/avg=',+sum/10);)).定義ー個int型的一維數(shù)組,包含10個元素,分別賦值為廣10,然后將數(shù)組中的元素都向前移ー個位置,即,a[0]=a[l],a[l]=a[2],...最后ー個元素的值是原來第一個元素的值,然后輸出這個數(shù)組。publicclassHaoll{publicstaticvoidmain(Stringargs[]){int[]a={1,2,3,4,5,6,7,8,9,10};inttemp=a[0];for(inti=O;i<a.length-l;i++){a[i]=a[i+l];System.out.print(a[i]+"");)System.out.println(temp);}}.定義ー個int型的ー維數(shù)組,包含40個元素,用來存儲每個學(xué)員的成績,循環(huán)產(chǎn)生40個。?100之間的隨機整數(shù),將它們存儲到ー維數(shù)組中,然后統(tǒng)計成績低于平均分的學(xué)員的人數(shù),并輸出出來。publicclassHao6(publicstaticvoidmain(Stringargs[]){intarr[]=newint[40];for(inti=0;i<40;i++){arr[i]=(int)(100*Math.random());System.out.print(arr[i]+"");)System.out.println();intsum=0;for(inti=0;i<40;i++){sum+=arr[i];)System.out.println(sum/40);intn=0;for(inti=0;i<40;i++){if(arr[i]<(sum/40)){System.out.print(arr[i]+"");n++;))System.out.println();System.out.println(n);)).(選做)承上題,將這40個成績按照從髙到低的順序輸出出來。importjava.util.*;publicclassHao9{publicstaticvoidmain(Stringargs[]){intarr[]=newint[40];for(inti=0;i<40;i++){arr[i]=(int)(100*Math.random());Arrays.sort(arr);System.out.print(arr[i]+"");System.out.println();intb[]=newint[40];for(inti=0;i<40;i++){b[i]=arr[39-i];System.out.print(b[i]+"");)))5編寫程序,將一個數(shù)組中的元素倒排過來。例如原數(shù)組為1,2,3,4,5;則倒排后數(shù)組中的值為5,4,3,2,1〇方法一:publicclassHao9(publicstaticvoidmain(Stringargs[]){intarr[]={1,2,345,6};for(inti=0;i<6;i++){System.out.print(arr[i]+"");)System.out.println();intb[]=newint[6];for(inti=0;i<6;i++){b[i]=arr[5-i];System.out.print(b[i]+"");})}方法—.:publicclassHao8{publicstaticvoidmain(Stringargs[]){intarr[]=newint[10];for(inti=0;i<10;i++){arr[i]=(int)(100*Math.random());System.out.print(arr[i]+nn);)fun(arr);System.out.printin();print(arr);publicstaticvoidfun(intx[]){inthead=0;inttail=x.length-1;intcenter=x.length/2;for(inti=0;i<center;i++){inttemp;temp=x[head];x[head]=x[tail];x[tail]=temp;head++;tail--;))publicstaticvoidprint(intx[]){for(inti=0;i<x.length;i++){System.out.print(x[i]+n");)}}6,要求定義ー個int型數(shù)組a,包含100個元素,保存100個隨機的4位數(shù)。再定義ー個int型數(shù)組b,包含10個元素。統(tǒng)計a數(shù)組中的元素對10求余等于〇的個數(shù),保存到b[〇]中:對10求余等于1的個數(shù),保存到b[l]中,依此類推。publicclassHaol3{publicstaticvoidmain(Stringargs[]){inta[]=newint[100];for(inti=0;i<100;i++){a[i]=(int)(10000*Math.random());System.out.print(a[i]+"n);}System.out.println();intb[]=newint[10];intk,sum;for(intj=0;j<b.length;j++){for(k=0zsum=0;k<a.length;k++){if((a[k]%10)==j)sum++;}b[j]=sum;System.out.println(sum);}}|1;把數(shù)組中intaロ={1,3,0,1,4,0,0,2,1,5,0,1,0,0,2,3,6,4,0,0};的所有的零元素都去掉,并且定義一個新的數(shù)組把新組成的數(shù)組放入里面publicclassHaol4publicstaticvoidmain(Stringargs[]){inta[]={1,3,0,1,4,0,0,2」,5,0,1,0,0,2,3,6,4,0,0上intb[]=newint[print(a)];fun(a,b);revear(b);)publicstaticintprint(inta[]){intcount=0;for(inti=O;i<a.length;i++){if(a[i]!=O)(count++;})returncount;}publicstaticvoidfun(inta[],intb[]){intfoot=0;for(inti=O;i<a.length;i++){if(a[i]!=O){b[foot++]=a[i];)})publicstaticvoidrevear(intx[]){for(inti=O;i<x.length;i++){System.out.print(x[i]+"H);}})2:兩個數(shù)組A:1,7,9,11,13,15,17,19數(shù)組B:2,4,6,8,10兩個數(shù)組合并成一個,并且按升序排列publicclassHaol4|publicstaticvoidmain(Stringargs[]){intsl[]=newint[]{1,3,5,7,9,13,15,17,19};ints2[]=newintロ{2,4,6,8,10};intc[]=contact(sl,s2);java.util.Arrays.sort(c);print(c);publicstaticint[]contact(inta[],intbロ){〃注意這句話的定義方式intc[]=newint[a.length+b.length];System.arraycopy(a,0,c,0,a.length);〃方法的引用,注意起始點System.arraycopy(b,0,c,a.length,b.length);returnc;)publicstaticvoidprint(intx[]){for(inti=O;i<x.length;i++){System.out.print(x[i]+"*');}}}7,定義ー個20*5的二維數(shù)組,用來存儲某班級20位學(xué)員的5門課的成績;這5門課按存儲順序依次為:coreC++,coreJava,Servlet,JSP和EJB。(1)循環(huán)給ニ維數(shù)組的每ー個元素賦0?100之間的隨機整數(shù)。(2)按照列表的方式輸出這些學(xué)員的每門課程的成績。(3)要求編寫程序求每個學(xué)員的總分,將其保留在另外一個ー維數(shù)組中。(4)要求編寫程序求所有學(xué)員的某門課程的平均分。publicclassHao9{publicstaticvoidmain(Stringargs[]){inta[][]=newint[20][5];intb[]=newint[20];intc[]=newint[5];System,out.printin("學(xué)生成績"+"\tcoreC++”+"n+ncoreJava11+nn+nServletn+n”+”JSP”+” H+nEJBn+n”+”總分“);for(inti=0;i<a.length;i++){intsum=0;for(intj=O;j<a[i].length;j++){a[i][j]=(int)(100*Math.random());sum+=a[i][j];System,out.print(H\tn+n ”+a[i][j]);//記住制表符的運用”ヽt”注意應(yīng)該怎樣賦值數(shù)據(jù))b[i]=sum;System.out.printin("\t"+" "+b[i]);//計算完了第一行的數(shù)據(jù)然后再換行;System.out.printin();)System,out.print(n 平均分 ”);intsuml=0;for(inti=0;i<c.length;i++){for(intj=0;j<a.length;j++){suml+=a[j][i];

suml=suml/b.length;System.out.print(suml+n\t n);//制表符的應(yīng)用好好看看放前面還是放后面?有規(guī)矩)5,寫一個方法用來生成一個整形數(shù)組,該方法返回一個!nt[]類型,需要一個int型參數(shù),數(shù)組的大小由傳進來的參數(shù)決定。importjava.util.Scanner;publicclassHao9{publicstaticvoidmain(Stringargs[]){Scannerscan=newScanner(System.in);System,out.print("輸出數(shù)據(jù):");inti=scan.nextlnt();print(i);}publicstaticvoidprint(inti){inta[]=newint[i];for(intj=0;j<i;j++){a[j]=(int)(100*Math.random());System.out.print(a[j]+nn);例題:每人有一輛車關(guān)系的表示(代碼連)classMember{privateintnum;privateStringname;privateCarcar;publicMember(intnumzStringname){this.num=num;=name;}publicStringgetMemberl(){return”編號”+this.num+“,”+“姓名”+;}publicCargetCar(){returncar;}publicvoidsetCar(Carcar){this.this.carcar;classCar{privateStringname;privateMembermember;publicCar(Stringname){=name;}publicStringgetCarl(){return”車名”+;}publicMembergetMember(){returnmember;)publicvoidsetMember(Membermember){this.member=member;}}publicclassHaol3{publicstaticvoidmain(Stringargs[]){Membermem=newMember(1,"xiaozhamg");Carcar=newCar("hake");mem.setCar(car);car.setMember(mem);System.out.printin(mem.getMemberl());System.out.printin(mem.getCar().getCarl());})某公司的雇員分為以下若干類:Employee:這是所有員エ總的父類,屬性:員エ的姓名和生日月份。方法:getSalary(intmonth)根據(jù)參數(shù)月份來確定工資,如果該月員エ過生日,0則公司會額外獎勵100元。SalariedEmployee:Employee的子類,拿固定工資的員エ。屬性:月薪HourlyEmployee:Employee的子類,按小時拿エ資的員エ,每月工作超出160小時的部分按照1?5倍工資發(fā)放屬性:每小時的工資、每月工作的小時數(shù)SalesEmployee:Employee的子類,銷售人員,エ資由月銷售額和提成率決定0屬性:月銷售額、提成率BasePlusSalesEmployee:SalesEmployee的子類,有固定底薪的銷售人員,エ資由底薪加上銷售提成部分 屬性:底薪。importjava.util.*;classEmployeeprivateStringname;privateintbirth;publicEmployee(Stringnamejntbirth){=name;this.birth=birth;}publicvoidsetName(Stringname){=name;|publicStringgetName(){return;}publicvoidsetMonthl(intbirth){this.birth=birth;}publicintgetMonthl(){returnthis.birth;}publicdoublegetSalary(intmonth){if(month==birth){return100;}elsereturn0;}}classSalariedEmployeeextendsEmployee(privateintsalary;publicSalariedEmployee(Stringnamejntbirthjntsalary){super(name,birth);this.salary=salary;)publicvoidsetSalaryl(intsalary){this.salary=salary;}publicintgetSalaryl(){returnthis.salary;}publicdoublegetSalary(intmonth){returnthis.salary+super.getSalary(month);}}classHourlyEmployeeextendsEmployee(privateinthours;privatedoubleincome;publicHourlyEmployee(Stringnamejntbirthjnthours,doubleincome){super(name,birth);this.hours=hours;this.income=income;}publicvoidsetHours(inthours){this.hours=hours;}publicintgetHours(){returnthis.hours;}publicvoidsetlncome(doubleincome){this.income=income;}publicdoublegetlncome(){returnthis.income;}publicdoublegetSalary(intmonth){if(hours>160){returnthis.income*(hours-160)*1.5+super.getSalary(month)+160*this.income;}else{returnhours*this.income+super.getSalary(month);)}}classSalesEmployeeextendsEmployee(privateintxiaoshoue;privatedoubleticheng;publicSalesEmployee(Stringnamejntbirthjntxiaoshoue,doubleticheng){super(name,birth);this.xiaoshoue=xiaoshoue;this.ticheng=ticheng;)publicvoidsetXiaoshoue(intxiaoshoue){this.xiaoshoue=xiaoshoue;}publicintgetXiaoshoue(){returnthis.xiaoshoue;}publicvoidsetTicheng(doubleticheng){this.ticheng=ticheng;returnthis.ticheng;)publicdoublegetSalary(intmonth){returnthis.xiaoshoue*ticheng+xiaoshoue+super.getSalary(month);}}classBasePlusSalesEmployeeextendsSalesEmployee(privateintbaseincome;publicBasePlusSalesEmployee(Stringnamejntbirthjntxiaoshoue.doubletichengjntbaseincome){super(name,birth,xiaoshoue,ticheng);this.baseincome=baseincome;}publicvoidsetBaselncome(intbaseincome){this.baseincome=baseincome;}publicintgetBaselncome(){returnthis.baseincome;}publicdoublegetSalary(intmonth){returnbaseincome+super.getSalary(month);)}publicclassHao6{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);while(true){System.out.printin("輸入月份:");intmonth=scan.nextlnt();Employee[]arr=newEmployee[5];arr[0]=newEmployee("小ーッ1);arr[l]=newSalariedEmployee(“小二”,3,5000);arr[2]=newHourlyEmployee(“小三”,5,170,20);arr[3]=newSalesEmployee(“小四”,6,10000,0.2);arr[4]=newBasePlusSalesEmployee("小五”,8,2000,0.3,1000);for(inti=0;i<arr.length;i++){System.out.println("姓名:"+arr[i].getName()+""+"收入:"+arr[i].getSalary(month));))})1.寫ー個形狀接口Shape有兩個方法一個求周長,ー個求面積.寫ー個長方形類Rect繼承于形狀類增加屬性長和寬分別去覆蓋求周長和求面積的方法.寫ー個圓形類Circle增加屬性半徑分別去覆蓋求周長和求面積的方法寫ー個測試類,在測試類中分別創(chuàng)建不同的對象放入進ー個Shape數(shù)組中進行,循環(huán)數(shù)組中的元素求周長和面積interfaceShape{publicvoidmianjif);publicvoidzhouchang();}classYuanimplementsShape{privateintr;publicYuan(intr){this.r=r;}publicvoidmianji(){System.out.println("所求的面積是:"+Math.PI*r*r);)publicvoidzhouchang(){System.out.println("所求的周長是:"+Math.Pド2*r);}|classChangfangxingimplementsShape(privateintchang;privateintkuan;publicChangfangxing(intchang,intkuan){this.chang=chang;this.kuan=kuan;)publicvoidmianji(){System.out.printin("所求的面積是:"+chang*kuan);}publicvoidzhouchang(){System.out.println("所求的周長是:"+2*(chang+kuan));}}publicclassHaol3publicstaticvoidmain(Stringargs[]){Shape[]shape=newShape[2];shape[0]=newYuan(2);shape[l]=newChangfangxing(2,3);for(inti=0;i<2;i++){shape[i].mianji();shape[i].zhouchang();}}}1,定義一個接口Assaultable(可攻擊的),該接口有一個抽象方法attack。。2,定義一個接口Mobile(可移動的),該接口有一個抽象方法move()。3,定義一?個抽象類Weapon,實現(xiàn)Assaultable接口和Mobile接口,但并沒有給出具體的實現(xiàn)方法.4,定義3個類:Tank,Flighter,WarShip都繼承自Weapon,分別用不同的方式實現(xiàn)Weapon類中的抽象方法。5,寫ー個類Army,代表ー支軍隊,這個類有一個屬性是Weapon數(shù)組w(用來存儲該軍隊所擁有的所有武器);該類還提供一個構(gòu)造方法,在構(gòu)造方法里通過傳ー個int類型的參數(shù)來限定該類所能擁有的最大武器數(shù)量,并用這ー大小來初始化數(shù)組w。該類還提供ー個方法addWeapon(Weaponwa),表示把參數(shù)wa所代表的武器加入到數(shù)組w中〇在這個類中還定義兩個方法attackAII()和moveAII(),讓w數(shù)組中的所有武器攻擊和移動。6,寫ー個主方法去測試以上程序.interfaceAssaultable{publicvoidattack。;}interfaceMobile{publicvoidmove();}abstractclassWeaponimplementsAssaultable,Mobile(}classTankextendsWeapon{publicvoidattack(){System.out.println("坦克攻擊ッ)publicvoidmove(){System.out.printin("坦克移動)}|classFeijiextendsWeaponpublicvoidattack(){System.out.println("飛機攻擊ッ;}publicvoidmove(){System.out.pHntln("飛機移動ッ;})classZhanjianextendsWeapon(publicvoidattack(){System.out.printinジ戰(zhàn)艦攻擊つ;)publicvoidmove(){System.out.println(“戰(zhàn)艦移動ッ;})classArmy(publicWeaponw[];intn=0;publicArmy(intmax){w=newWeapon[max];)publicvoidaddWeapon(Weaponwa){if(n<w.length){w[n]=wa;n++;}else{System.out.println("這是武器的最大值”);}}publicvoidattackAII(){for(inti二〇;i<3;i++){w[i].attack();)}publicvoidmoveAII(){for(inti=0;i<3;i++){w[i].move();publicclassHaol4publicstaticvoidmain(Stringargs[]){Armya=newArmy(3);a.addWeapon(newTank());a.addWeapon(newFeiji());a.addWeapon(newZhanjian(J);a.attackAII();a.moveAII();)}1:LinkedList:使用LinkedList實現(xiàn)堆棧的原理:后進先出classMyStack{privateLinkedListIk=newLinkedList();publicvoidpush(Objectobj){}publicvoidpop(){))importjava.util.LinkedList;classStack{privateLinkedListIk=newLinkedList();publicvoidpush(Objectobj){Ik.addFirst(obj);}publicObjectpop(){returnIk.pollFirst();)}publicclassHao24{publicstaticvoidmain(Stringargs[]){Stackh=newStack();h.push(nfn);h.push(ndn);h.push(”s");h.push(nen);h.push(nan);System.out.printin(h.pop());System.out.printin(h.pop());System.out.printin(h.pop());System.out.printin(h.pop());System.out.printin(h.pop());}}關(guān)于SET的ー個程序的總結(jié)包括排序輸出中的原則的定義equalshashcode的寫法importjava.util.Collections;importjava.util.Comparator;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;importjava.util.TreeSet;publicclassTest7{publicstaticvoidmain(Stringargs[]){TreeSett=new立生星^();//定義ー個集合t用來放東西還要注意定義的集合是按什么排的就像柜『籃『不同的裝東西的集合Teachertl=newTeacher("xiaoren",1フ8);//定義集合t中所放的東西是什么Teachert2=newTeacher("xiaofab",12);Teachert3newTeacher("xiaoda",145);Teachert3Teachert4=newTeacher("xiaosf",78);TeacherTeachert5newTeacher(nxiaorenHz18);Teachert5Teachert6=newTeacher(Hxiaoag*\148);Teachert7=newTeacher(nxiaoadhnz58);t.add(tl).;〃把定義的東西放到所定義的集合t屮t.add(t2);t.add(t3);t.add(t4);t.add(t5);t.add(t6);t.add(t7);Iteratorit=t.iterator();//注意:是對集合t進行迭代處理while(it.hasNext()){System.out.printin(it.next());}}レ/下面開始定義不同東西的應(yīng)該按什么順序放和取出classTeacherimplementsComparably]//首先Teacher繼承了Comparable的比較關(guān)系自己規(guī)定是按什么進行比較的排序的privateStringname;//對Teacher的各個屬性進行封裝privateintage;publicTeacher(Stringname,intage){=name;this.age=age;publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;publicintgetAge(){returnage;publicvoidsetAge(intage){this.age=age;}publicStringtoString(){return"Teacher[age=H+age+”,name="+name+"]";}publicintcompareTo(Objecto){//此題規(guī)定了是按照年齡大小進彳了比較if(〇instanceofTeacher){//確定是不是自己定義的Teacher類,;Teachert=(Teacher)。;//如果是則進行強制轉(zhuǎn)換returnthis.age-t.age;//返回自己的定義規(guī)則}elsereturn0;publicbooleanequals(Objectobj){//因為是用的set此時對象中イ;能有相同的但是還要規(guī)定你按照什么原則判斷他們相同所以要用到equalshashcodei£(obj==nun){//首先判斷是イ;是為空值若是則返回falsereturnfalse;}elseif(obj==this){//再次判斷是不是兩個對象的地址是不是相同若是則返回truereturntrue;}elseif(objinstanceofTeacher){//最后確定是不是Teacher類型的若是Teachert=(Teacher)obj;//如果是則進行強制轉(zhuǎn)換return.equals()〃/返回自己的定義的規(guī)則就是兩個對象的名字相同則兩個對象就算相同}elsereturnfalse;}publicinthashCode(){//哈希碼值的判斷return1;3:Mapmap=newHashM叩〇;map.putC'l'V'b");map.putC'Z'V'a");map.putC'3";,dH);m叩.put(“4",“c");對以上HashMap進行排序importjava.util.Arrays;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;publicclassRen4{publicstaticvoidmain(String[]args){Mapmap=newHashMap();//map.put("54"/"a");//map.put(“15ヴd”);map.put(“52ヴs”);map.put(“65”,”g”);Object[]set=m叩.keySet().toArray();〃定義ー個數(shù)組把map中的key值放到這個數(shù)組中。注意m叩.keyset。的返回值是SET型的而SET型有個方法可以返回數(shù)組形式Arrays.sort(set); 〃返回全部的key并且把他放在set集合中for(inti=O;i<set.length;i++){System.out.println(map.get(set[i]));}}}〃此題的注意點是:要怎樣說取出key并且把他進行排序按照key的順序輸出出來4:獲取Person類中所有的String類型的成員變量,針對以下引用Personty=newPerson(,'tye2"/100,"gem");將String類型的屬性值中含有e改寫為BSystem.out.println(ty);tyB2100gBm思路:.獲取Person類中所有屬性.判斷所有屬性中哪些是String類型.獲得String類型的屬性中針對ty引用所對應(yīng)的值.將e替換為Bimportjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;interfaceGood{publicStringgetName();publicintgetCount();publicfloatgetPrice();}classsupermarket{privateListallGoods;publicsupermarket(){this.allGoods=newArrayList();}publicvoidadd(Goodgood){this,allGoods.add(good);}publicvoidremove(Goodgood){this,allGoods.remove(good);}publicListsearch(Stringkey){Listtemp=newArrayList();Iteratorit=this.allGoods.iterator();while(it,hasNext()){Goodg=(Good)it.next();if(g.getName().indexOf(key)==1){temp.add(g);)}returntemp;}publicListgetAHGoods(){returnthis.allGoods;abstractclassBooksimplementsGood{privateStringname;privateintcount;privatefloatprice;publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicintgetCount(){returncount;}publicvoidsetCount(intcount){this.count=count;)publicfloatgetPrice(){returnprice;}publicvoidsetPrice(floatprice){this.price=price;}publicBooks(){@OverridepublicStringtoString(){returnnBooks[count=n4-count+”,name="+name+",price="+price+丁;)publicBooks(Stringname,intcount,floatprice){super();=name;this.count=count;this.price=price;}@OverridepublicinthashCode(){return.hashCode()+newInteger(this.count).hashCode()+newFloat(this.price).hashCode();}@Overridepublicbooleanequals(Objectobj){if(obj==null){returnfalse;}if(this==obj){returntrue;}if(objinstanceofBooks){returntrue;)Booksb=(Books)obj;if(.equals()&&b.count==this.count&&b.price==this.price)returntrue;returntrue;publicclassSuperMark{publicstaticvoidmain(Stringargs[]){supermarketsu=newsupermarket();su.add(newBooks("java”,12,32.05f));}}附錄資料:java處理高并發(fā)高負載類網(wǎng)站的優(yōu)化方法java處理高并發(fā)高負載類網(wǎng)站中數(shù)據(jù)庫的設(shè)計方法(java教程,java處理大量數(shù)據(jù)ノava高負載數(shù)據(jù))一:高并發(fā)高負載類網(wǎng)站關(guān)注點之?dāng)?shù)據(jù)庫沒錯,首先是數(shù)據(jù)庫,這是大多數(shù)應(yīng)用所面臨的首個SPOFo尤其是Web2.0的應(yīng)用,數(shù)據(jù)庫的響應(yīng)是首先要解決的。一般來說MySQL是最常用的,可能最初是ー個mysql主機,當(dāng)數(shù)據(jù)增加到100萬以上,那么,MySQL的效能急劇下降。常用的優(yōu)化措施是M-S(主一從)方式進行同步復(fù)制,將查詢和操作和分別在不同的服務(wù)器上進行操作。我推薦的是M-M-Slaves方式,2個主Mysql,多個Slaves,需要注意的是,雖然有2個Master,但是同時只有!個是Active,我們可以在一定時候切換。之所以用2個M,是保證M不會又成為系統(tǒng)的SPOF.Slaves可以進ー步負載均衡,可以結(jié)合LVS,從而將select操作適當(dāng)?shù)钠胶獾讲煌膕laves上。以上架構(gòu)可以抗衡到ー定量的負載,但是隨著用戶進ー步增加,你的用戶表數(shù)據(jù)超過1千萬這時那個M變成了SPOF。你不能任意擴充Slaves,否則復(fù)制同步的開銷將直線上升,怎么辦?我的方法是表分區(qū),從業(yè)務(wù)層面上進行分區(qū)。最簡單的,以用戶數(shù)據(jù)為例。根據(jù)一定的切分方式,比如id,切分到不同的數(shù)據(jù)庫集群去。全局數(shù)據(jù)庫用于meta數(shù)據(jù)的查詢。缺點是每次查詢,會增加一次,比如你要查ー個用戶nightsailer,你首先要到全局數(shù)據(jù)庫群找到nightsailer對應(yīng)的clusterid,然后再到指定的cluster找到nightsailer的實際數(shù)據(jù)。每個cluster可以用m-m方式,或者m-m-slaves方式。這是ー個可以擴展的結(jié)構(gòu),隨著負載的增加,你可以簡單的增加新的mysqlcluster進去。需要注意的是:1、禁用全部auto_increment的字段2、id需要采用通用的算法集中分配3、要具有ヒ匕較好的方法來監(jiān)控mysql主機的負載和服務(wù)的運行狀態(tài)。如果你有30臺以上的mysql數(shù)據(jù)庫在跑就明白我的意思了。4、不要使用持久性鏈接(不要用pconnect),相反,使用sqlrelay這種第三方的數(shù)據(jù)庫鏈接池,或者干脆自己做,因為php4中mysql的鏈接池經(jīng)常出問題。二:高并發(fā)高負載網(wǎng)站的系統(tǒng)架構(gòu)之HTML靜態(tài)化其實大家都知道,效率最高、消耗最小的就是純靜態(tài)化,所以我們盡可能使我們的網(wǎng)站上的頁面采用靜態(tài)頁面來實現(xiàn),這個最簡單的方法其實也是最有效的方法。但是對于大量內(nèi)容并且頻繁更新的網(wǎng)站,我們無法全部手動去挨個實現(xiàn),于是出現(xiàn)了我們常見的信息發(fā)布系統(tǒng)CMS,像我們常訪問的各個門戶站點的新聞頻道,甚至他們的其他頻道,都是通過信息發(fā)布系統(tǒng)來管理和實現(xiàn)的,信息發(fā)布系統(tǒng)可以實現(xiàn)最簡單的信息錄入自動生成靜態(tài)頁面,還能具備頻道管理、權(quán)限管理、自動抓取等功能,對于ー個大型網(wǎng)站來說,擁有一套高效、可管理的CMS是必不可少的。除了門戶和信息發(fā)布類型的網(wǎng)站,對于交互性要求很高的社區(qū)類型網(wǎng)站來說,盡可能的靜態(tài)化也是提高性能的必要手段,將社區(qū)內(nèi)的帖子、文章進行實時的靜態(tài)化,有更新的時候再重新靜態(tài)化也是大量使用的策略,像Mop的大雜蛤就是使用了這樣的策略,網(wǎng)易社區(qū)等也是如此。 同時,html靜態(tài)化也是某些緩存策略使用的手段,對于系統(tǒng)中頻繁使用數(shù)據(jù)庫查詢但是內(nèi)容更新很小的應(yīng)用,可以考慮使用html靜態(tài)化來實現(xiàn),比如論壇中論壇的公用設(shè)置信息,這些信息目前的主流論壇都可以進行后臺管理并且存儲再數(shù)據(jù)庫中,這些信息其實大量被前臺程序調(diào)用,但是更新頻率很小,可以考慮將這部分內(nèi)容進行后臺更新的時候逬行靜態(tài)化,這樣避免了大量的數(shù)據(jù)庫訪問請求高并發(fā)。網(wǎng)站HTML靜態(tài)化解決方案當(dāng)ー個Servlet資源請求到達WEB服務(wù)器之后我們會填充指定的JSP頁面來響應(yīng)請求:HTTP請求一一Web服務(wù)器一一Servlet—業(yè)務(wù)邏輯處理一訪問數(shù)據(jù)ー填充JSPー響應(yīng)請求HTML靜態(tài)化之后:HTTP請求一一Web服務(wù)器一一Servlet-HTML-響應(yīng)請求靜態(tài)訪求如下Servlet:publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,lOException{if(request.getParameter(nchapterIdn)!=null){StringchapterFileName ="bookChapterRead_n+request.getParameter(nchapterId")+".htmr;StringchapterFilePath=getServletContext().getRealPath(ソ")+chapterFileName; FilechapterFile=newFile(chapterFilePath);if(chapterFile.exists()){response.sendRedirect(chapterFileName);return;}//如果有這個文件就告訴瀏覽器轉(zhuǎn)向 INovelChapterBiznovelChapterBiz=newNovelChapterBizImpl(); Novelchapternovelchapter=novelChapterBiz.searchNovelChapterById(Integer.parseInt(request.getParameter("chapterld")));/Z章節(jié)信息 intlastPageld=novelChapterBiz.searchLastCHapterId(novelChapter.getNovelId().getId(),novelChapter.getldO); int nextPageld =novelChapterBiz.searchNextChapterId(novelChapter.getNovelId().getId(),novelChapter.getId()); request.setAttribute("novelChapter",novelchapter); request.setAttribute("lastPageld",lastPageld); request.setAttribute("nextPageId",nextPageld); newCreateStaticHTMLPage().createStaticHTMLPage(request,response,getServletContext(), chapterFileName,chapterFilePath,"/bookRead.jsp");}}生成HTML靜態(tài)頁面的類:package com.jb.y2t034.thefifth.web.servlet; importjava.io.ByteArrayOutputStream;importjava.io.FileOutputStream;import java.io.IOException; importjava.io.OutputStreamWriter;import java.io.PrintWriter; importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpServletResponseWrapper;/***創(chuàng)建HTML靜態(tài)頁面?功能:創(chuàng)建HTML靜態(tài)頁面*時間:2009年1011日?地點:home*@authormavk**/publicclassCreateStaticHTMLPage{ /** *生成靜態(tài)HTML頁面的方法 ?@paramrequest請求對象*@paramresponse響應(yīng)對象?@paramservletContextServlet上下文@paramfileName文件名稱 *@paramfileFullPath文件完整路徑 ?*@throws@paramjspPath需要生成靜態(tài)文件的JSP路徑(相對即可)*@throwslOException*@throwsServletException*/publicvoidcreateStaticHTMLPage(HttpServletRequest request,HttpServletResponseresponse,ServletContextservletContext,StringfileName,StringfileFullPath,StringjspPath)throwsServletException,IOException{response.setContentType("text/html;charset=gb2312");〃設(shè)置HTML結(jié)果流編碼(即HTML文件編碼)RequestDispatcherrd=servletContext.getRequestDispatcher(jspPath);/Z得至リJSP資源finalByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream();//用于從ServletOutputStream中接收資源 finalServletOutputStreamservletOuputStream=newServletOutputStream(){/Z用于從HttpServletResponse中接收資源 publicvoidwrite(byte[]b,intoff,intlen){ byteArrayOutputStream.write(b, off,len); } publicvoidwrite(intb){ byteArrayOutputStream.write(b);} };finalPrintWriterprintwriter=newPrintWriter(new〇utputStreamWriter(byteArrayOutputStream));〃把轉(zhuǎn)換字節(jié)流轉(zhuǎn)換成字符流 HttpServletResponseHttpServletResponse=newHttpServletResponseWrapper(response){//用于從response獲取結(jié)果流資源(重寫了兩個方法) publicServletOutputStreamgetOutputStream(){ returnPrintWriterpublicservletOuputStream;PrintWriterpublicgetWriter(){ returnprintwriter; } }; rd.include(request,httpServletResponse);〃發(fā)送結(jié)果流 printWriter.flush。ノ/刷新緩沖區(qū),把緩沖區(qū)的數(shù)據(jù)輸出 FileOutputStreamfileOutputStream=newFileOutputStream(fileFullPath);byteArrayOutputStream.writeTo(fileOutputStream);//把byteArrayOuputStream中的資源全部寫入到fileOuputStream中file〇utputStream.close();〃關(guān)閉輸出流,并釋放相關(guān)資源 response.sendRedirect(fileName);〃發(fā)送指定文件流到客戶端}}三:高并發(fā)高負載類網(wǎng)站關(guān)注點之緩存、負載均衡、存儲緩存是另ー個大問題,我一般用memcached來做緩存集群,一般來說部署!0臺左右就差不多(10g內(nèi)存池),需要注意一點,千萬不能用使用swap,最好關(guān)閉linux的sw叩。負載均衡/加速可能上面說緩存的時候,有人第一想的是頁面靜態(tài)化,所謂的靜態(tài)html,我認為這是常識,不屬于要點了。頁面的靜態(tài)化隨之帶來的是靜態(tài)服務(wù)的負載均衡和加速。我認為しighttped+Squid是最好的方式了。LVS< >lighttped====>squid(s)====lighttpd上面是我經(jīng)常用的。注意,我沒有用apache,除非特定的需求,否則我不部署apache,因為我一般用php-fastcgi酉己合lighttpd,性能比apache+mod_php要強很多。squid的使用可以解決文件的同步等等問題,但是需要注意,你要很好的監(jiān)控緩存的命中率,盡可能的提高的90%以上。squid和lighttped也有很多的話題要討論,這里不贅述。存儲存儲也是ー個大問題,ー種是小文件的存儲,比如圖片這類。另ー種是大文件的存儲,比如搜索引擎的索引,一般單文件都超過2g以上。小文件的存儲最簡單的方法是結(jié)合!ighttpd來進行分布?;蛘吒纱嗍褂肦edhat的GFS,優(yōu)點是應(yīng)用透明,缺點是費用較高。我是指你購買盤陣的問題。我的項目中,存儲量是2-10Tb,我采用了分布式存儲。這里要解決文件的復(fù)制和冗余。這樣每個文件有不同的冗余,這方面可以參考google的gfs的論文。大文件的存儲,可以參考nutch的方案,現(xiàn)在已經(jīng)獨立為hadoop子項目。(你可以googleit)其他:此外,passport等也是考慮的,不過都屬于ヒ匕較簡單的了。四:高并發(fā)高負載網(wǎng)站的系統(tǒng)架構(gòu)之圖片服務(wù)器分離大家知道,對于Web服務(wù)器來說,不管是Apache.IIS還是其他容器,圖片是最消耗資源的,于是我們有必要將圖片與頁面逬行分離,這是基本上大型網(wǎng)站都會采用的策略,他們都有獨立的圖片服務(wù)器,甚至很多臺圖片服務(wù)器。這樣的架構(gòu)可以降低提供頁面訪問請求的服務(wù)器系統(tǒng)壓カ,并且可以保證系統(tǒng)不會因為圖片問題而崩潰,在應(yīng)用服務(wù)器和圖片服務(wù)器上,可以進行不同的配置優(yōu)化,比如叩ache在配置ContentType的時候可以盡量少支持,盡可能少的LoadModule,保證更高的系統(tǒng)消耗和執(zhí)行效率。利用Apache實現(xiàn)圖片服務(wù)器的分離緣由:起步階段的應(yīng)用,都可能部署在ー臺服務(wù)器上(費用上的原因)第一個優(yōu)先分離的,肯定是數(shù)據(jù)庫和應(yīng)用服務(wù)器。第

二個分離的,會是什么呢?各有各的考慮,我所在的項目組重點考慮的節(jié)約帶寬,服務(wù)器性能再好,帶寬再高,并發(fā)來了,也容易撐不住。因此,我這篇文章的重點在這里。這里重點是介紹實踐,不一定符合所有情況,供看者參考吧,環(huán)境介紹:WEB應(yīng)用服務(wù)器:4CPU雙核2G,內(nèi)存4G部署:Win2003/ApacheHttpServer2.1/Tomcat6數(shù)據(jù)庫服務(wù)器:4CPU雙核2G,內(nèi)存4G部署:Win2003/MSSQL2000步驟:步驟ー:增加2臺配置為:2CPU雙核2G,內(nèi)存2G普通服務(wù)器,做資源服務(wù)器部署:Tomcat6,跑了一個圖片上傳的簡單應(yīng)用,(記得指定web.xml的〈distributable/〉),并指定域名為resl.***.com,res2.***.com,采用ajp協(xié)議步驟二:修改Apachehttpd.conf配置原來應(yīng)用的文件上傳功能網(wǎng)址為:1、/fileupload.html2、7otherupload.html在httpd.conf中增加如下配置<VirtualHost*:80>ServerAdminwebmaster@***.comProxyPass/fileupload.htmlbalancer://rescluster/fileuploadlbmethod=byrequestsstickysession=JSESSIONID nofailover=Off timeout=5maxattempts=3 ProxyPass /otherupload.htmlbalancer://rescluster/otherupload.html lbmethod=byrequestsstickysession=JSESSIONID nofailover=Off timeout=5maxattempts=3#<!—負載均衡—> <Proxybalancer://rescluster/>BalancerMemberajp://resl.***.com:8009smax=5max=500 ttl=120 retry=300loadfactor=100route=tomcatlBalancerMemberajp://res2.***.com:8009smax=5max=500ttl=120retry=300loadfactor=100max=500ttl=120retry=300loadfactor=100route=tomcat2</Proxy></VirtualHost>步驟三,修改業(yè)務(wù)邏輯:所有上傳文件在數(shù)據(jù)庫中均采用全url的方式保存,例如產(chǎn)品圖片路徑存成:http://resH.com/upload/20090101/productl20302005.jpg現(xiàn)在,你可以高枕無憂了,帶寬不夠時,增加個幾十臺圖片服務(wù)器,只需要稍微修改一下叩ache的配置文件,即可。五:高并發(fā)高負載網(wǎng)站的系統(tǒng)架構(gòu)之?dāng)?shù)據(jù)庫集群和庫表散列大型網(wǎng)站都有復(fù)雜的應(yīng)用,這些應(yīng)用必須使用數(shù)據(jù)庫,那么在面對大量訪問的時候,數(shù)據(jù)庫的瓶頸很快就能顯現(xiàn)出來,這時一臺數(shù)據(jù)庫將很快無法滿足應(yīng)用,于是我們需要使用數(shù)據(jù)庫集群或者庫表散列。 在數(shù)據(jù)庫集群方面,很多數(shù)據(jù)庫都有自己的解決方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什么樣的DB,就參考相應(yīng)的解決方案來實施即可。 上面提到的數(shù)據(jù)庫集群由于在架構(gòu)、成本、擴張性方面都會受到所采用DB類型的限制,于是我們需要從應(yīng)用程序的角度來考慮改善系統(tǒng)架構(gòu),庫表散列是常用并且最有效的解決方案。我們在應(yīng)用程序中按照業(yè)務(wù)和應(yīng)用或者功能模塊將數(shù)據(jù)庫逬行分離,不同的模塊對應(yīng)不同的數(shù)據(jù)庫或者表,再按照一定的策略對某個頁面或者功能進行更小

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論