java pop_Java LinkedList pop()方法

Java LinkedList pop()方法

java.util.LinkedList.pop() 从LinkedList表示的堆栈中弹出栈顶元素。

1 语法

public E pop()

2 参数

3 返回值

返回LinkedList栈顶(第一个)的元素。

4 示例

package com.yiidian;

/**

* 一点教程网: http://www.yiidian.com

*/

/**

* java.util.LinkedList.pop()方法的例子

*/

import java.util.*;

public class Demo {

public static void main(String[] args) {

// create a LinkedList

LinkedList list = new LinkedList();

// add some elements

list.add("Hello");

list.add(2);

list.add("Chocolate");

list.add("10");

// print the list

System.out.println("LinkedList:" + list);

// pop the list

System.out.println("Pop element in the list:" + list.pop());

// print the list

System.out.println("LinkedList:" + list);

}

}

输出结果为:

LinkedList:[Hello, 2, Chocolate, 10]

Pop element in the list:Hello

LinkedList:[2, Chocolate, 10]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1,编写程序,判断给定的某个年份是否是闰年。 闰年的判断规则如下: (1)若某个年份能被4整除但不能被100整除,则是闰年。 (2)若某个年份能被400整除,则也是闰年。 import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print("请输入年份"); int year; //定义输入的年份名字为“year” Scanner scanner = new Scanner(System.in); year = scanner.nextInt(); if (year<0||year>3000){ System.out.println("年份有误,程序退出!"); System.exit(0); } if ((year%4==0)&&(year%100!=0)||(year%400==0)) System.out.println(year+" is bissextile"); else System.out.println(year+" is not bissextile "); } } 2,给定一个百分制的分数,输出相应的等级。 90分以上 A级 80~89 B级 70~79 C级 60~69 D级 60分以下 E级 import java.util.Scanner; class Mark{ public static void main(String[] args){ System.out.println("请输入一个分数"); //定义输入的分数为“mark”,且分数会有小数 double mark; Scanner scanner = new Scanner(System.in); mark = scanner.nextDouble(); //判断是否有输入错误。 if(mark<0||mark>100){ System.out.println("输入有误! "); System.exit(0); } /*判断分数的等级 90分以上者A级, 80~89分者 B级,70~79分者 C级, 60~69者 D级,60分以下 E级 */ if (mark>=90) System.out.println("this mark is grade \'A\' "); else if (mark>=80) System.out.println("this mark is grade \'B\' "); else if (mark>=70) System.out.println("this mark is grade \'C\' "); else if (mark>=60) System.out.println("this mark is grade \'D\' "); else System.out.println("this mark is grade \'E\' "); } } 3,编写程序求 1+3+5+7+……+99 的和值。 class he{ public static void main(String[] args){ int number = 1; //初始值1,以后再+2递增上去 int sum = 0; for ( ; number <100; number+=2 ){ sum += number; } System.out.println("1+3+5+7+……+99= " +sum); } } 4、利用for循环打印 9*9 表? 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 //循环嵌套,打印九九乘法表 public class NineNine{ public static void main(String[]args){ System.out.println(); for (int j=1;j<10;j++){ for(int k=1;k<10;k++) { //老师的做法,判断语句里的 k<=j,省去下列的if语句。 if (k>j) break; //此处用 continue也可以,只是效率低一点 System.out.print(" "+k+"X"+j+"="+j*k); } System.out.println(); } } } 6、输出所有的水仙花数,把谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身, 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5 class DafodilNumber{ public static void main(String[] args){ System.out.println("以下是所有的水仙花数"); int number = 100; // 由于水仙花数是三位数,故由100开始算起 int i, j, k; // i j k 分别为number 的百位、十位、个位 for (int sum; number<1000; number++){ i=number/100; j=(number-i*100)/10; k=number-i*100-j*10; sum=i*i*i+j*j*j+k*k*k; if (sum==number) System.out.println(number+" is a dafodil number! "); } } } 7、求 a+aa+aaa+.......+aaaaaaaaa=? 其中a为1至9之中的一个数,项数也要可以指定。 import java.util.Scanner; class Multinomial{ public static void main(String[] args){ int a; //定义输入的 a int howMany; //定义最后的一项有多少个数字 Scanner scanner = new Scanner(System.in); System.out.println("请输入一个 1~9 的 a 值"); a = scanner.nextInt(); System.out.println("请问要相加多少项?"); howMany = scanner.nextInt(); int sum=0; int a1=a; // 用来保存 a 的初始值 for (int i=1; i<=howMany; i++){ sum+= a; a = 10*a +a1; // 这表示a 的下一项 // 每次 a 的下一项都等于前一项*10,再加上刚输入时的 a ;注意,这时的 a 已经变化了。 } System.out.println("sum="+sum); } } 8、求 2/1+3/2+5/3+8/5+13/8.....前20项之和? class Sum{ public static void main(Sting[] args){ double sum=0; double fenZi=2.0, fenMu=1.0; //初始的分子 (fenZi)=2,分母(fenMu)=1 for(int i=1; i<=20; i++){ sum += fenZi / fenMu ; fenMu = fenZi; //下一项的分母 = 上一项的分子 fenZi += fenMu; //下一项的分子 = 上一项的分子加分母 } System.out.println("sum= "sum); } } 9、利用程序输出如下图形: * * * * * * * * * * * * * * * * * * * * * * * * * class Asterisk{ public static void main(String[] args){ for (int i=1; i<=13; i+=2){ for(int j=1; j<=i && i+j<= 14; j++){System.out.print("* ");} System.out.println(); // 换行 } } } 11、计算圆周率 PI=4-4/3+4/5-4/7....... 打印出第一个大于 3.1415小于 3.1416的值 class Pi { public static void main(String[] args){ double pi =0; //定义初始值 double fenZi = 4; //分子为4 double fenMu = 1; //第一个4,可看作分母为1 的分式,以后的分母每次递增2 for (int i = 0; i < 1000000000; i++){ //运行老久,减少循环次数会快很多,只是精确度小些 pi += (fenZi/fenMu) ; fenZi *= -1.0; //每项分子的变化是+4,-4,+4,-4 .... fenMu += 2.0; //分母的变化是1,3,5,7, .... 每项递加2 } System.out.println(pi); } } 输出结果为pi = 3.1415926525880504,应该不精确 12、输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值 1 1 2 3 5 8 13 21 34 规律:一个数等于前两个数之和 //计算斐波那契数列(Fibonacci)的第n个值 public class Fibonacci{ public static void main(String args[]){ int n = Integer.parseInt(args[0]); int n1 = 1;//第一个数 int n2 = 1;//第二个数 int sum = 0;//和 if(n<=0){ System.out.println("参数错误!"); return; } if(n<=2){ sum = 1; }else{ for(int i=3;i<=n;i++){ sum = n1+n2; n1 = n2; n2 = sum; } } System.out.println(sum); } } //计算斐波那契数列(Fibonacci)的第n个值 //并把整个数列打印出来 public class FibonacciPrint{ public static void main(String args[]){ int n = Integer.parseInt(args[0]); FibonacciPrint t = new FibonacciPrint(); for(int i=1;i<=n;i++){ t.print(i); } } public void print(int n){ int n1 = 1;//第一个数 int n2 = 1;//第二个数 int sum = 0;//和 if(n<=0){ System.out.println("参数错误!"); return; } if(n<=2){ sum = 1; }else{ for(int i=3;i<=n;i++){ sum = n1+n2; n1 = n2; n2 = sum; } } System.out.println(sum); } } 13、求1-1/3+1/5-1/7+1/9......的值。 a,求出前50项和值。 b,求出最后一项绝对值小于1e-5的和值。 15、在屏幕上打印出n行的金字塔图案,如,若n=5,则图案如下: * *** ***** ******* ********* //打印金字塔图案 public class PrintStar{ public static void main(String args[]){ int col = Integer.parseInt(args[0]); for(int i=1;i<=col;i++){//i表示行数 //打印空格 for(int k=0;k<col-i;k++){ System.out.print(" "); } //打印星星 for(int m=0;m<2*i-1;m++){ System.out.print("*"); } System.out.println(); } } } 16、歌德巴赫猜想,任何一个大于六的偶数可以拆分成两个质数的和 打印出所有的可能 //任何一个大于六的偶数可以拆分成两个质数的和 //打印出所有的可能 public class Gedebahe{ public static void main(String args[]){ int num = Integer.parseInt(args[0]); if(num<=6){ System.out.println("参数错误!"); return; } if(num%2!=0){ System.out.println("参数错误!"); return; } Gedebahe g = new Gedebahe(); //1不是质数,2是偶数,因此从3开始循环 for(int i=3;i<=num/2;i++){ if(i%2==0){//如果为偶数,退出本次循环 continue; } //当i与num-i都为质数时,满足条件,打印 if(g.isPrime(i) && g.isPrime(num-i)){ System.out.println(i+" + "+(num-i)+" = "+num); } } } 第4章 数组 1. 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值, 最小值,平均值,和值,并输出出来。 class ArrayNumber{ public static void main(String[] args){ int[] arrayNumber; arrayNumber = new int[10]; System.out.println("以下是随机的10个整数:"); // 填入随机的 10个整数 for (int i =0; i<arrayNumber.length; i++){ arrayNumber[i] = (int)(100*Math.random()); System.out.print(arrayNumber[i]+" "); } System.out.println(); int max = arrayNumber[0]; int min = arrayNumber[0]; int sum = 0; for (int i =0; i<arrayNumber.length; i++){ if(max < arrayNumber[i]) max = arrayNumber[i]; //求最大值 if(min > arrayNumber[i]) min = arrayNumber[i]; //求最小值 sum += arrayNumber[i]; } System.out.println("其中 Max="+max+",Min="+min+",Sum="+sum+",Avg="+sum/10.0); } } 2.定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置, 即,a[0]=a[1],a[1]=a[2],…最后一个元素的值是原来第一个元素的值,然后输出这个数组。 3. 定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数, 将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。 4. (选做)承上题,将这40个成绩按照从高到低的顺序输出出来。 5,(选做)编写程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,5;则倒排后数组中的值 为5,4,3,2,1。 6,要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个 int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存 到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。 class Remain{ public static void main( String[] args){ int[] a = new int[100]; //保存100个随机4位数到 a 中 for (int i = 0; i < a.length; i++){ a[i] = (int) (1000*Math.random()); } //统计 a 数组中的元素对 10 求余的各个的数目 int[] b = new int[10]; int k,sum; for (int j = 0; j < b.length; j++){ for (k=0,sum=0; k < a.length; k++){ if ((a[k]%10)==j) sum++; } b[j] = sum; System.out.printf("b[%d]=%d\n",j,b[j]); } } } 7,定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课 按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。 (1)循环给二维数组的每一个元素赋0~100之间的随机整数。 (2)按照列表的方式输出这些学员的每门课程的成绩。 (3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。 (4)要求编写程序求所有学员的某门课程的平均分。 class Student{ public static void main(String[] args ){ int[][] mark = new int[20][5]; // 给学生赋分数值,随机生成 for ( int i = 0; ) } }//未完成 8,完成九宫格程序 在井字形的格局中(只能是奇数格局),放入数字(数字由),使每行每列以及斜角线的和都相等 经验规则:从 1 开始按顺序逐个填写; 1 放在第一行的中间位置;下一个数往右上角45度处填写; 如果单边越界则按头尾相接地填;如果有填写冲突,则填到刚才位置的底下一格; 如果有两边越界,则填到刚才位置的底下一格。 个人认为,可以先把最中间的数填到九宫格的最中间位置;再按上面的规则逐个填写,而且 填的时候还可以把头尾对应的数填到对应的格子中。(第 n 个值跟倒数第 n 个值对应,格局上以最中 间格为轴心对应) 这样就可以同时填两个数,效率比之前更高;其正确性有待数学论证(但多次实验之后都没发现有错)。 九宫格的 1 至少还可以填在另外的三个位置,只是接下来的填写顺序需要相应改变; 再根据九宫格的对称性,至少可以有8种不同的填写方式 import java.util.Scanner; class NinePalace{ public static void main(String[] args){ // 定义 N 为九宫格的行列数,需要输入 System.out.println("请输入九宫格的行列规模(只能是奇数的)"); Scanner n = new Scanner(System.in); int N; //判断格局是否奇数 (可判断出偶数、负数 及小数) double d; while (true){ d = n.nextDouble(); N = (int)d; if ((d-N)>1.0E-4||N%2==0||N<0) {System.out.println("输入出错,格局只能是正奇数。请重新输入");} else break; } //老师的九宫格填写方法 int[][] result = new int[N][N]; //定义保存九宫格的数组 int row = 0; //行 初始位置 int col = N/2; //列 初始位置,因为列由0开始,故N/2是中间位置 for (int i=1; i<=N*N; i++){ result [row][col] = i; row--; col++; if (row<0&&col>=N){col--;row+=2;} //行列都越界 else if (row<0){ row = N-1;} //行越界 else if (col>=N){col = 0;} //列越界 else if (result[row][col] != 0){col--;row+=2;} //有冲突 } //打印出九宫格 for (int i=0; i<N; i++){ for(int j=0; j<N; j++){System.out.print(result[i][j]+"\t");} System.out.println(); } //我个人的填格方式 int[][] result2 = new int[N][N]; //为免冲突,重新 new 一个数组 result2[N/2][N/2] = (N*N+1)/2; //先把中间值赋予中间位置 row = 0; //定义行及列的初始赋值位置。之前赋值的for对两个值有影响,故需重新定位 col = N/2; for (int i=1; i<=N*N/2; i++){ result2[row][col] = i; //下面这句是把跟 i 对应的值放到格局对应的位置上 result2[N-row-1][N-col-1] = N*N+1-i; row--; col++; if (row<0){ row = N-1;} //行越界 else if (col>=N){col = 0;} //列越界 else if (result2[row][col] != 0){col--;row+=2;} //有冲突 //这方法不可能出现行列两边都越界的情况,详情需要数学论证 } System.out.println(); //再次打印出九宫格,以对比验证 for (int i=0; i<N; i++){ for(int j=0; j<N; j++){System.out.print(result2[i][j]+"\t");} System.out.println(); } } } 9,求一个3*3矩阵对角线元素之和 10,打印杨辉三角 11. 约梭芬杀人法 把犯人围成一圈,每次从固定位置开始算起,杀掉第7个人,直到剩下最后一个。 11_2、用数组实现约瑟夫出圈问题。 n个人排成一圈,从第一个人开始报数,从1开始报,报到m的人出圈,剩下的人继续开始从1报数,直到所有的人都出圈为止。对于给定的n,m,求出所有人的出圈顺序。 12. 判断随机整数是否是素数 产生100个0-999之间的随机整数,然后判断这100个随机整数哪些是素数,哪些不是? public class PrimeTest{ public static void main(String args[]){ for(int i=0;i<100;i++){ int num = (int)(Math.random()*1000); PrimeTest t = new PrimeTest(); if(t.isPrime(num)){ System.out.println(num+" 是素数!"); }else{ System.out.println(num+" 不是素数!"); } System.out.println(); } } public boolean isPrime(int num){ for(int i=2;i<=num/2;i++){ if(num%i==0){ System.out.println(num+"第一个被"+i+"整除!"); return false; } } return true; } } 冒泡排序法: //按从大到小的排序 int tmp = a[0]; for (int i=0; i < a.length; i++){ for (int j=0; j < a.length - i -1; j++){ if (a[j] < a[j+1]) { tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } } } day06 练习 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名和生日月份。 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日, 则公司会额外奖励100元。 SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪 HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5倍工资发放 属性:每小时的工资、每月工作的小时数 SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定 属性:月销售额、提成率 BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员, 工资由底薪加上销售提成部分 属性:底薪。 public class TestEmployee{ public static void main(String[]args){ Employee[] es = new Employee[5]; es[0] = new Employee("赵君",2); es[1] = new SalariedEmployee("宋婕", 1, 8000); es[2] = new HourlyEmployee("王超", 5, 10, 300); es[3] = new SalesEmployee("秋娥", 2, 200000, 0.05); es[4] = new BaseSalarySalesEmployee("郭镫鸿", 1, 1000000, 0.1, 10000); int month = 2;//本月为2月 System.out.println("宇宙集团"+month+"月工资表:"); for(int i=0; i<es.length; i++){ System.out.println(es[i].getName()+":"+es[i].getSalary(month)); } } } class Employee{ private String name; private int birth; public String getName(){ return name; } public Employee(String name, int birth){ this.name = name; this.birth = birth; } public double getSalary(int month){ if(month==birth){ return 100; } return 0; } } class SalariedEmployee extends Employee{ private double salary; public SalariedEmployee(String name, int birth, double salary){ super(name, birth); this.salary = salary; } public double getSalary(int month){ return salary + super.getSalary(month); } } class HourlyEmployee extends Employee{ private double hourSalary; private int hour; public HourlyEmployee(String name, int birth, double hourSalary, int hour){ super(name, birth); this.hourSalary = hourSalary; this.hour = hour; } public double getSalary(int month){ if(hour<=160){ return hourSalary*hour+super.getSalary(month); }else{ return 160*hourSalary+(hour-160)*hourSalary*1.5+super.getSalary(month); } } } class SalesEmployee extends Employee{ private double sales; private double pre; public SalesEmployee(String name, int birth, double sales, double pre){ super(name, birth); this.sales = sales; this.pre = pre; } public double getSalary(int month){ return sales*pre+super.getSalary(month); } } class BaseSalarySalesEmployee extends SalesEmployee{ private double baseSalary; public BaseSalarySalesEmployee(String name, int birth, double sales, double pre, double baseSalary){ super(name, birth, sales, pre); this.baseSalary = baseSalary; } public double getSalary(int month){ return baseSalary+super.getSalary(month); } } /** * 在原有的雇员练习上修改代码 * 公司会给SalaryEmployee每月另外发放2000元加班费,给 * BasePlusSalesEmployee发放1000元加班费 * 改写原有代码,加入以上的逻辑 * 并写一个方法,打印出本月公司总共发放了多少加班费 * @author Administrator * */ public class EmployeeTest { /** * @param args */ public static void main(String[] args) { Employee e[] = new Employee[4]; e[0] = new SalariedEmployee("魏威",10,5000); e[1] = new HourlyEmployee("段利峰",8,80,242); e[2] = new SalesEmployee("林龙",11,300000,0.1); e[3] = new BasedPlusSalesEmployee("华溪",1,100000,0.15,1500); for(int i=0;i<e.length;i++){ System.out.println(e[i].getName()+": "+e[i].getSalary(11)); } //统计加班费 int result = 0; // for(int i=0;i<e.length;i++){ // if(e[i] instanceof SalariedEmployee){ // SalariedEmployee s = (SalariedEmployee)e[i]; // result += s.getAddtionalSalary(); // } // if(e[i] instanceof BasedPlusSalesEmployee){ // BasedPlusSalesEmployee b = (BasedPlusSalesEmployee)e[i]; // result += b.getAddtionalSalary(); // } // } for(int i=0;i<e.length;i++){ result += e[i].getAddtionalSalary(); } System.out.println("加班费: "+result); } } interface AddtionalSalary{ int getAddtionalSalary(); } class Employee implements AddtionalSalary{ private String name;//员工姓名 private int birth;//员工生日月份 public Employee(String name,int birth){ this.name = name; this.birth = birth; } public int getSalary(int month){ int result = 0; if(month==birth) result = 100; return result; } public String getName(){ return name; } public int getAddtionalSalary(){ return 0; } } class SalariedEmployee extends Employee{ private int salaryPerMonth; public SalariedEmployee(String name,int birth,int salaryPerMonth){ super(name,birth); this.salaryPerMonth = salaryPerMonth; } public int getSalary(int month){ return this.salaryPerMonth + super.getSalary(month)+ this.getAddtionalSalary(); } public int getAddtionalSalary(){ return 2000; } } class HourlyEmployee extends Employee{ private int salaryPerHour; private int hoursPerMonth; public HourlyEmployee(String name,int birth,int salaryPerHour,int hoursPerMonth){ super(name,birth); this.salaryPerHour = salaryPerHour; this.hoursPerMonth = hoursPerMonth; } public int getSalary(int month){ int result = 0; if(this.hoursPerMonth<=160){ result = hoursPerMonth*salaryPerHour; }else{ result = 160*salaryPerHour + (int)((hoursPerMonth-160)*1.5*salaryPerHour); } return result+super.getSalary(month); } } class SalesEmployee extends Employee{ private int sales; private double rate; public SalesEmployee(String name,int birth,int sales,double rate){ super(name,birth); this.sales = sales; this.rate = rate; } public int getSalary(int month){ return (int)(sales*rate)+super.getSalary(month); } } class BasedPlusSalesEmployee extends SalesEmployee{ private int basedSalary; public BasedPlusSalesEmployee(String name,int birth,int sales,double rate,int basedSalary){ super(name,birth,sales,rate); this.basedSalary = basedSalary; } public int getSalary(int month){ return this.basedSalary+super.getSalary(month) + this.getAddtionalSalary(); } public int getAddtionalSalary(){ return 1000; } } 经典算法: 1. 某学校为学生分配宿舍,每6个人一间房(不考虑性别差异),问需要多少房? 答案: (x+5)/6 注意理解int类型数值。 2. 让数值在 0~9 之间循环。 public class test{ public static void main(String[] args){ int i=0; while(true){ i = (i+1)%10; System.out.println(i); } } } 作业: 1. 写一个数组类(放对象): 功能包括:添加(添加不限制多少项)、修改、插入、删除、查询 class MyArray{ private Object[] os = new Object[10]; public void add(Object o); public void set(int index, Object o); public void insert(int index, Objecto); public void remove(int index); public void remove(Object o); public Object get(int index); } public class TestMyArray{ public static void main(String[]args){ MyArray ma = new MyArray(); ma.add("aaa"); ma.add("bbb"); ma.add("ccc"); Object o = ma.get(1); Iterator it = ma.iterator(); while(it.hasNext()){ Object o1 = it.next(); System.out.println(o1); } } } 作业 10-08 1. 随机产生 20 个整数(10以内的),放入一个ArrayList中, 用迭代器遍历这个ArrayList 2. 并删除其中为 5 的数 3. 再产生 3 个整数,插入到位置 4 处 4. 把所有值为 1 的数都变成 10 import java.util.ArrayList; class ArrayList{ private Object[] os = new Object[20]; } public class TestArray{ public static void main(String[]args){ ArrayList a = new ArrayList(); ma.add("aaa"); ma.add("bbb"); ma.add("ccc"); Object o = ma.get(1); Iterator it = ma.iterator(); while(it.hasNext()){ Object o1 = it.next(); System.out.println(o1); } } } 1. 产生 3000 个 10 以内的数,放入 hashSet 2. 遍历它,打印每一个值 import java.util.HashSet; import java.util.Iterator; import java.util.Random; public class TestHashSet { public static void main(String[] args) { Random r = new Random(); HashSet hs1 = new HashSet(); for(int i=0; i<3000; i++){ hs1.add(r.nextInt(10)); } Iterator it1 = hs1.iterator(); while(it1.hasNext()){ System.out.print(it1.next()+" "); } } } //由于 HashSet 不能重复,所以只有10个数在里面,按哈希排序 2 4 9 8 6 1 3 7 5 0 /* * 测试TreeSet 的比较器, * 在有自己的比较器的情况下,如何实现Comparable接口 */ import java.util.*; class Teacher{ int id; String name; int age; public Teacher() {} public Teacher(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) {this.id = id; } public String getName() { return name;} public void setName(String name) { this.name = name;} public int getAge() {return age;} public void setAge(int age) {this.age = age;} public int TeacherComparator(Object o){ Teacher t1 = (Teacher) o; if(t1.getId() > id){return 1;} else if (t1.getId() < id){return -1;} return 0; } } class TreeSet{ } class Test { public static void main(String[] args) { String s1 = new String("aaa"); String s2 = new String("bbb"); String s3 = new String("aaa"); System.out.println(s1==s3); System.out.println(s1.equals(s3)); HashSet hs = new HashSet(); hs.add(s1); hs.add(s2); hs.add(s3); Iterator it = hs.iterator(); while(it.hasNext()){ System.out.println(it.next()); } System.out.printf("%x\n",s1.hashCode()); System.out.printf("%x\n",s2.hashCode()); System.out.printf("%x\n",s3.hashCode()); } } 1. 在Map中,以name作Key,以Student类 作Velue,写一个HashMap import java.util.*; class Student{ int id; String name; int age; public Student() {} public Student( int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() {return id;} public void setId(int id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;} public int getAge() {return age;} public void setAge(int age) {this.age = age;} } class TestHashMap{ public static void main(String[] args) { HashMap hm = new HashMap(); Student s1 = new Student(1,"jacky",19); hm.put("jacky",s1); hm.put("tom",new Student(2,"tom",21)); hm.put("kitty",new Student(3,"kitty",17)); Iterator it = hm.keySet().iterator(); while(it.hasNext()){ Object key = it.next(); Student value = (Student) hm.get(key); System.out.println(key+":id="+value.id+",age="+value.age); } System.out.println("============================="); //比较 KeySet() 和 entrySet() 两种迭代方式 for(Iterator i1 = hm.entrySet().iterator(); i1.hasNext(); ) { Map.Entry me = (Map.Entry) i1.next(); Student s = (Student) me.getValue(); System.out.println(me.getKey()+": id="+s.id+" age="+s.age); } } } day13 homework 1. /********************************************************************************** 自己写一个栈: ( 先进后出 ) 建议底层用LinkedList实现 参照 java.util.Stack 方法: boolean empty() 测试堆栈是否为空。 E peek() 查看栈顶对象而不移除它。 E pop() 移除栈顶对象并作为此函数的值返回该对象。 E push(E item) 把项压入栈顶。 int search(Object o) 返回对象在栈中的位置,以 1 为基数。 ***************************************************************************************/ //不能用继承,因为它破坏封装。只需调用即可 import java.util.LinkedList; class MyStack<E>{ private LinkedList<E> list = new LinkedList<E>(); public boolean empty() {return list.isEmpty();} public E peek() {return list.peek(); } public E pop() {return list.poll(); } public void push(E o) {list.addFirst(o); } //int indexOf(Object o) 返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。 public int search(Object o){return list.indexOf(o);} } 2. /*************************************************************************************** 定义以下类,完成后面的问题,并验证。 Exam类 考试类 属性: 若干学生 一张考卷 提示:学生采用HashSet存放 Paper类 考卷类 属性:若干试题 提示:试题采用HashMap存放,key为String,表示题号,value为试题对象 Student类 学生类 属性:姓名 一张答卷 一张考卷 考试成绩 Question类 试题类 属性:题号 题目描述 若干选项 正确答案 提示:若干选项用ArrayList AnswerSheet类 答卷类 属性:每道题的答案 提示:答卷中每道题的答案用HashMap存放,key为String,表示题号,value为学生的答案 问题:为Exam类添加一个方法,用来为所有学生判卷,并打印成绩排名(名次、姓名、成绩) ***************************************************************************************/ 3. /*************************************************************************************** 项目:商品管理系统 功能:增删改查 (可按各种属性查) 商品属性:名称、价格(两位小数)、种类 ***************************************************************************************/ day17 图形界面 1. 计算器 /*****************例题 画出计算器的界面***************************** 界面如下: 1 2 3 + 4 5 6 - 7 8 9 * 0 . = / *******************/ import java.awt.*; import javax.swing.*; class Calculator { public static void main(String[] args){ JTextField text = new JTextField(); JFrame f = new JFrame("计算器"); Font font = new Font("宋体", Font.BOLD, 25);//"宋体"想写成默认,则写“null” text.setFont(font); //定义字体 text.setHorizontalAlignment(JTextField.RIGHT);//令text的文字从右边起 text.setEditable(false);//设置文本不可修改,默认可修改(true) f.add(text, BorderLayout.NORTH);//Frame和Dialog的默认布局管理器是Border Layout ButtonActionListener listener = new ButtonActionListener(text);//事件反应在text中 JPanel buttonPanel = new JPanel();//设法把计算器键盘放到这个Jpanel按钮上 String op = "123+456-789*0.=/"; GridLayout gridlayout = new GridLayout(4,4,10,10); buttonPanel.setLayout(gridlayout);//把计算器键盘放到buttonPanel按钮上 for(int i=0; i<op.length(); i++){ char c = op.charAt(i); //拿到字符串的第i个字符 JButton b = new JButton(c+"");//把字符放到按钮上 b.addActionListener(listener);//在按钮上放置监听器,每次按都会有反应 buttonPanel.add(b);//把按钮放到buttonPanel上 }//这个循环很值得学习,很常用 f.add(buttonPanel/*, BorderLayout.CENTER*/); //默认添加到CENTER位置 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(300, 250); f.setVisible(true);//这句要放到最后,等事件完成后再显示 }} //监听者 class ButtonActionListener implements ActionListener{ private JTextField textField; public ButtonActionListener(JTextField textField) { this.textField = textField; } public void actionPerformed(ActionEvent e) {//必须覆盖它的actionPerformed() textField.append("哈哈,放了几个字\n"); }} /*********************未实现计算器的具体功能*******************************/ 2. 扫雷游戏 3. 俄罗斯方块 day19 多线程 写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。要求用线程间的通信。 注:分别给两个对象构造一个对象o,数字每打印两个或字母每打印一个就执行o.wait()。 在o.wait()之前不要忘了写o.notify()。 class Test{ public static void main(String[] args) { Printer p = new Printer(); Thread t1 = new NumberPrinter(p); Thread t2 = new LetterPrinter(p); t1.start(); t2.start(); } } class Printer{ private int index = 1;//设为1,方便计算3的倍数 //打印数字的构造方法,每打印两个数字,等待打印一个字母 public synchronized void print(int i){ while(index%3==0){try{wait();}catch(Exception e){}} System.out.print(" "+i); index++; notifyAll(); } //打印字母,每打印一个字母,等待打印两个数字 public synchronized void print(char c){ while(index%3!=0){try{wait();}catch(Exception e){}} System.out.print(" "+c); index++; notifyAll(); } } //打印数字的线程 class NumberPrinter extends Thread{ private Printer p; public NumberPrinter(Printer p){this.p = p;} public void run(){ for(int i = 1; i<=52; i++){ p.print(i); } } } //打印字母的线程 class LetterPrinter extends Thread{ private Printer p; public LetterPrinter(Printer p){this.p = p;} public void run(){ for(char c='A'; c<='Z'; c++){ p.print(c); } } } /*如果这题中,想保存需要打印的结果,可在Printer类里定义一个成员变量 String s = ""; //不写“”的话是null,null跟没有东西是不一样的,它会把null当成字符 =_= 然后在两个print()方法里面,while循环后分别加上 s = s + " "+i; 以及 s = s +" "+ c;*/
What’s Inside Preface 1 Java SE5 and SE6 .................. 2 Java SE6 ......................................... 2 The 4th edition........................ 2 Changes .......................................... 3 Note on the cover design ....... 4 Acknowledgements ................ 4 Introduction 9 Prerequisites .......................... 9 Learning Java ....................... 10 Goals ..................................... 10 Teaching from this book ....... 11 JDK HTML documentation ...................... 11 Exercises ............................... 12 Foundations for Java ............ 12 Source code ........................... 12 Coding standards ......................... 14 Errors .................................... 14 Introduction to Objects 15 The progress of abstraction ........................ 15 An object has an interface ........................... 17 An object provides services ................... 18 The hidden implementation .................... 19 Reusing the implementation ................... 20 Inheritance............................ 21 Is-a vs. is-like-a relationships ......24 Interchangeable objects with polymorphism ............. 25 The singly rooted hierarchy .............................. 28 Containers ............................ 28 Parameterized types (Generics) ..29 Object creation & lifetime ... 30 Exception handling: dealing with errors ............... 31 Concurrent programming ... 32 Java and the Internet .......... 33 What is the Web? ......................... 33 Client-side programming ............ 34 Server-side programming ............ 38 Summary .............................. 38 Everything Is an Object 41 You manipulate objects with references ..................... 41 You must create all the objects ....................... 42 Where storage lives ...................... 42 Special case: primitive types ....... 43 Arrays in Java .............................. 44 You never need to destroy an object .................. 45 Scoping ........................................ 45 Scope of objects ........................... 46 Creating new data types: class ..................................... 46 Fields and methods ..................... 47 Methods, arguments, and return values ................. 48 The argument list ......................... 49 Building a Java program ...... 50 Name visibility ............................. 50 Using other components ............. 50 The static keyword ..................... 51 Your first Java program ....... 52 Compiling and running ............... 54 Comments and embedded documentation ..................... 55 Comment documentation ............ 55 Syntax .......................................... 56 Embedded HTML ........................ 56 Some example tags ...................... 57 Documentation example ............. 59 Coding style .......................... 60 Summary .............................. 60 Exercises .............................. 60 Operators 63 Simpler print statements ..... 63 Using Java operators ........... 64 Precedence ........................... 64 Assignment .......................... 65 Aliasing during method calls ....... 66 Mathematical operators....... 67 Unary minus and plus operators ....................... 68 Auto increment and decrement ............................ 69 Relational operators ............ 70 Testing object equivalence ........... 70 Logical operators .................. 71 Short-circuiting ............................ 72 Literals .................................. 73 Exponential notation ................... 74 Bitwise operators .................. 75 Shift operators ......................76 Ternary if-else operator ......79 String operator + and += .............................. 80 Common pitfalls when using operators ........... 81 Casting operators .................. 81 Truncation and rounding ........... 82 Promotion ................................... 83 Java has no “sizeof” ............. 83 A compendium of operators .......................... 84 Summary ............................... 91 Controlling Execution 93 true and false..................... 93 if-else .................................. 93 Iteration ............................... 94 do-while ..................................... 95 for ................................................ 95 The comma operator................... 96 Foreach syntax ......................97 return ................................. 99 break and continue .......... 99 The infamous “goto” ........... 101 switch ................................104 Summary ............................ 106 Initialization & Cleanup 107 Guaranteed initialization with the constructor ........... 107 Method overloading .......... 109 Distinguishing overloaded methods .................. 110 Overloading with primitives ....... 111 Overloading on return values .... 114 Default constructors ........... 114 The this keyword ............... 116 Calling constructors from constructors ...................... 118 The meaning of static ............... 119 Cleanup: finalization and garbage collection ........ 119 What is finalize() for? ............. 120 You must perform cleanup ......... 121 The termination condition ......... 121 How a garbage collector works .. 122 Member initialization ......... 125 Specifying initialization ............. 126 Constructor initialization ... 127 Order of initialization ................ 127 static data initialization ........... 128 Explicit static initialization ...... 130 Non-static instance initialization ................ 132 Array initialization ............. 133 Variable argument lists ............. 137 Enumerated types ............... 141 Summary ............................ 143 Access Control 145 package: the library unit ................... 146 Code organization ...................... 147 Creating unique package names ........................... 148 A custom tool library .................. 151 Using imports to change behavior ..................... 152 Package caveat ........................... 153 Java access specifiers .......... 153 Package access ........................... 153 public: interface access ............ 154 private: you can’t touch that! .. 155 protected: inheritance access . 156 Interface and implementation .......... 158 Class access ........................ 159 Summary ............................ 162 Reusing Classes 165 Composition syntax ........... 165 Inheritance syntax ............. 168 Initializing the base class ........... 169 Delegation ........................... 171 Combining composition and inheritance ................... 173 Guaranteeing proper cleanup .... 174 Name hiding ............................... 177 Choosing composition vs. inheritance .................... 178 protected ......................... 180 Upcasting ............................ 181 Why “upcasting”? ...................... 181 Composition vs. inheritance revisited ..................................... 182 The final keyword ............. 182 final data ................................... 183 final methods ............................ 186 final classes ............................... 187 final caution .............................. 188 Initialization and class loading ................ 189 Initialization with inheritance ... 189 Summary ............................. 191 Polymorphism 193 Upcasting revisited ............. 193 Forgetting the object type .......... 194 The twist ............................. 196 Method-call binding .................. 196 Producing the right behavior ..... 196 Extensibility ............................... 199 Pitfall: “overriding” private methods ...................... 202 Pitfall: fields and static methods .................. 203 Constructors and polymorphism ................... 204 Order of constructor calls ......... 204 Inheritance and cleanup ........... 206 Behavior of polymorphic methods inside constructors .... 210 Covariant return types ........ 211 Designing with inheritance .................. 212 Substitution vs. extension ......... 213 Downcasting and runtime type information ......... 215 Summary ............................. 217 Interfaces 219 Abstract classes and methods ....................... 219 Interfaces ........................... 222 Complete decoupling ......... 225 “Multiple inheritance” in Java ................................ 230 Extending an interface with inheritance .......................... 231 Name collisions when combining Interfaces ................233 Adapting to an interface .... 234 Fields in interfaces ............ 235 Initializing fields in interfaces .. 236 Nesting interfaces .............. 237 Interfaces and factories ..... 239 Summary ............................. 241 Inner Classes 243 Creating inner classes ........ 243 The link to the outer class .................... 244 Using .this and .new ........ 246 Inner classes and upcasting ..................... 247 Inner classes in methods and scopes ........... 249 Anonymous inner classes ........................ 251 Factory Method revisited .......... 254 Nested classes .................... 256 Classes inside interfaces ............ 257 Reaching outward from a multiplynested class ............... 259 Why inner classes? ............. 259 Closures & callbacks .................. 261 Inner classes & control frameworks ................... 263 Inheriting from inner classes ....................... 269 Can inner classes be overridden? ................... 269 Local inner classes .............. 271 Inner-class identifiers ........ 272 Summary ............................ 273 Holding Your Objects 275 Generics and type-safe containers ........... 276 Basic concepts .................... 278 Adding groups of elements ......................... 279 Printing containers ............ 281 List ..................................... 283 Iterator ............................. 286 ListIterator ............................ 288 LinkedList ....................... 289 Stack ................................. 291 Set ...................................... 292 Map ................................... 295 Queue ................................ 298 PriorityQueue ........................ 299 Collection vs. Iterator ... 301 Foreach and iterators ......... 304 The Adapter Method idiom ...... 306 Summary ............................ 308 Error Handling with Exceptions 313 Concepts ............................. 313 Basic exceptions.................. 314 Exception arguments ................. 315 Catching an exception ........ 315 The try block ............................. 316 Exception handlers .................... 316 Creating your own exceptions ................... 317 Exceptions and logging .............. 319 The exception specification ....................... 322 Catching any exception ..... 323 The stack trace .......................... 324 Rethrowing an exception ........... 325 Exception chaining .................... 327 Standard Java exceptions .......................... 330 Special case: RuntimeException ............... 330 Performing cleanup with finally ....................... 332 What’s finally for? .................... 333 Using finally during return .... 335 Pitfall: the lost exception .......... 336 Exception restrictions ....... 338 Constructors ...................... 340 Exception matching ........... 344 Alternative approaches ...... 345 History ...................................... 346 Perspectives ............................... 347 Passing exceptions to the console ............................ 349 Converting checked to unchecked exceptions ........... 350 Exception guidelines ......... 352 Summary ............................ 352 Strings 355 Immutable Strings ............355 Overloading ‘+’ vs. StringBuilder ................. 356 Unintended recursion ....... 359 Operations on Strings ....... 361 Formatting output ............. 362 printf() .................................... 363 System.out.format() ............ 363 The Formatter class ............... 363 Format specifiers ...................... 364 Formatter conversions ........... 366 String.format() ..................... 368 Regular expressions ........... 370 Basics .........................................370 Creating regular expressions ..... 372 Quantifiers ................................. 374 Pattern and Matcher ............. 375 split() ........................................382 Replace operations .................... 383 reset() .......................................384 Regular expressions and Java I/O .............................. 385 Scanning input ................... 386 Scanner delimiters ................. 388 Scanning with regular expressions ................... 389 StringTokenizer ............. 389 Summary ............................ 391 Type Information 393 The need for RTTI .............. 393 The Class object ................ 395 Class literals ............................... 399 Generic class references ............ 401 New cast syntax ........................ 403 Checking before a cast ....... 404 Using class literals .................... 409 A dynamic instanceof .............. 411 Counting recursively .................. 412 Registered factories ........... 413 instanceof vs. Class equivalence......................... 416 Reflection: runtime class information ................ 417 A class method extractor ........... 418 Dynamic proxies ................ 420 Null Objects ........................ 424 Mock Objects & Stubs ................ 429 Interfaces and type information ................ 430 Summary ............................ 436 Generics 439 Comparison with C++ ........ 440 Simple generics .................. 440 A tuple library ............................ 442 A stack class ............................... 444 RandomList ............................ 445 Generic interfaces .............. 446 Generic methods ................ 449 Leveraging type argument inference ...................450 Varargs and generic methods .... 452 A generic method to use with Generators............ 453 A general-purpose Generator . 453 Simplifying tuple use ................. 455 A Set utility................................ 456 Anonymous inner classes ....................... 459 Building complex models ................. 460 The mystery of erasure ...... 462 The C++ approach .................... 464 Migration compatibility ............ 466 The problem with erasure ......... 467 The action at the boundaries .... 468 Compensating for erasure ........................... 471 Creating instances of types ........ 472 Arrays of generics ...................... 475 Bounds ............................... 479 Wildcards ........................... 482 How smart is the compiler? ...... 484 Contravariance .......................... 485 Unbounded wildcards ............... 488 Capture conversion ................... 492 Issues ................................. 493 No primitives as type parameters .................... 493 Implementing parameterized interfaces ........... 495 Casting and warnings ............... 496 Overloading ............................... 498 Base class hijacks an interface .. 498 Self-bounded types ............ 500 Curiously recurring generics .... 500 Self-bounding ............................ 501 Argument covariance ................ 503 Dynamic type safety .......... 506 Exceptions ......................... 507 Mixins ................................ 509 Mixins in C++ ........................... 509 Mixing with interfaces ............... 510 Using the Decorator pattern ....... 511 Mixins with dynamic proxies .... 512 Latent typing ....................... 514 Compensating for the lack of latent typing ...... 518 Reflection ................................... 518 Applying a method to a sequence .............................. 519 When you don’t happen to have the right interface .......... 521 Simulating latent typing with adapters ............................. 523 Using function objects as strategies ....................... 526 Summary: Is casting really so bad? ...................... 531 Further reading .......................... 533 Arrays 535 Why arrays are special ........535 Arrays are first-class objects ............... 536 Returning an array ............. 539 Multidimensional arrays .................................. 540 Arrays and generics ........... 543 Creating test data ............... 546 Arrays.fill() ............................. 546 Data Generators ...................... 547 Creating arrays from Generators ..................... 551 Arrays utilities .................. 555 Copying an array ........................ 555 Comparing arrays ...................... 556 Array element comparisons ...... 557 Sorting an array .........................560 Searching a sorted array ............ 561 Summary ............................ 564 Containers in Depth 567 Full container taxonomy .... 567 Filling containers ............... 568 A Generator solution .............. 569 Map generators ......................... 570 Using Abstract classes ............. 573 Collection functionality ....................... 580 Optional operations ........... 582 Unsupported operations............ 583 List functionality ............... 586 Sets and storage order ...... 589 SortedSet ................................. 591 Queues ................................ 594 Priority queues ........................... 594 Deques ....................................... 595 Understanding Maps ........ 598 Performance .............................. 599 SortedMap ............................. 602 LinkedHashMap ................... 603 Hashing and hash codes .... 605 Understanding hashCodeQ .... 607 Hashing for speed ...................... 610 Overriding hashCode() ........... 613 Choosing an implementation .............. 617 A performance test framework ........................... 618 Choosing between Lists ............ 621 Microbenchmarking dangers .... 626 Choosing between Sets ............. 627 Choosing between Maps ........... 629 Utilities ............................... 632 Sorting and searching Lists ...... 635 Making a Collection or Map unmodifiable ............... 636 Synchronizing a Collection or Map ................... 637 Holding references ............ 639 The WeakHashMap .............. 640 Java 1.0/1.1 containers ...... 642 Vector & Enumeration ........ 642 Hashtable ............................... 643 Stack ........................................ 643 BitSet ....................................... 644 Summary ............................ 646 I/O 647 The File class .................... 647 A directory lister ........................ 647 Directory utilities ...................... 650 Checking for and creating directories ............. 654 Input and output ............... 656 Types of InputStream ............. 657 Types of OutputStream ......... 658 Adding attributes and useful interfaces .......... 659 Reading from an InputStream with FilterlnputStream ........ 660 Writing to an OutputStream with FilterOutputStream ...... 661 Readers & Writers ......... 662 Sources and sinks of data ......... 662 Modifying stream behavior ...... 663 Unchanged classes .................... 664 Off by itself: RandomAccessFile ....... 665 Typical uses of I/O streams .................... 665 Buffered input file ...................... 665 Input from memory .................. 666 Formatted memory input .......... 667 Basic file output ........................ 668 Storing and recovering data ..... 669 Reading and writing random-access files .................. 670 Piped streams ............................ 672 File reading & writing utilities ............... 672 Reading binary files ................... 674 Standard I/O ....................... 675 Reading from standard input .... 675 Changing System.out to a PrintWriter ...................... 676 Redirecting standard I/O .......... 676 Process control ................... 677 New I/O ............................. 679 Converting data.......................... 681 Fetching primitives ................... 684 View buffers ............................... 685 Data manipulation with buffers ............................... 688 Buffer details ............................. 689 Memory-mapped files ............... 692 File locking ................................. 695 Compression ...................... 698 Simple compression with GZIP .................................. 698 Multifile storage with Zip .......... 699 Java ARchives (JARs) ................ 701 Object serialization ............ 703 Finding the class ........................ 706 Controlling serialization ............ 707 Using persistence ....................... 713 XML .................................... 718 Preferences .......................... 721 Summary ............................ 722 Enumerated Types 725 Basic enum features ......... 725 Using static imports with enums ............................... 726 Adding methods to an enum ........................ 727 Overriding enum methods ....... 728 enums in switch statements ............. 728 The mystery of values() ........................ 729 Implements, not inherits ......................... 732 Random selection .............. 732 Using interfaces for organization .................. 734 Using EnumSet instead of flags ................... 737 Using EnumMap ............. 739 Constant-specific methods .............................. 740 Chain of Responsibility with enums ............................... 743 State machines with enums ..... 746 Multiple dispatching ........... 751 Dispatching with enums .......... 753 Using constant-specific methods ......... 755 Dispatching with EnumMaps ...................... 756 Using a 2-D array ....................... 757 Summary ............................ 759 Annotations 761 Basic syntax ....................... 762 Defining annotations ................. 762 Meta-annotations ...................... 763 Writing annotation processors ........ 765 Annotation elements ................. 765 Default value constraints ........... 766 Generating external files............ 766 Annotations don’t support inheritance ................... 769 Implementing the processor...... 769 Using apt to process annotations ............ 772 Using the Visitor pattern with apt .............................. 775 Annotation-based unit testing .......................... 778 Using @Unit with generics ....... 785 No “suites” necessary .................786 Implementing @Unit ............... 787 Removing test code .................... 792 Summary ............................. 795 Concurrency 797 The many faces of concurrency ....................... 798 Faster execution .........................798 Improving code design ............. 800 Basic threading .................. 801 Defining tasks ............................ 801 The Thread class ..................... 802 Using Executors ..................... 804 Producing return values from tasks ................................. 806 Sleeping ..................................... 808 Priority ...................................... 809 Yielding ...................................... 810 Daemon threads ......................... 810 Coding variations ....................... 814 Terminology ............................... 819 Joining a thread ......................... 819 Creating responsive user interfaces ............................ 821 Thread groups ........................... 822 Catching exceptions .................. 822 Sharing resources .............. 824 Improperly accessing resources ................... 825 Resolving shared resource contention ................... 827 Atomicity and volatility ............. 831 Atomic classes ........................... 836 Critical sections .......................... 837 Synchronizing on other objects .............................. 841 Thread local storage ..................843 Terminating tasks .............. 844 The ornamental garden ............ 844 Terminating when blocked ........ 847 Interruption .............................. 848 Checking for an interrupt .......... 854 Cooperation between tasks ..................... 856 wait() and notifyAll() ............ 857 notify() vs. notifyAll() ........... 861 Producers and consumers ........ 863 Producer-consumers and queues ................................ 868 Using pipes for I/O between tasks ............................. 872 Deadlock ............................. 874 New library components ........................ 879 CountDownLatch .................. 879 CyclicBarrier .......................... 881 DelayQueue ........................... 883 PriorityBlockingQueue....... 885 The greenhouse controller with ScheduledExecutor ...... 887 Semaphore ............................. 890 Exchanger .............................. 893 Simulation .......................... 896 Bank teller simulation .............. 896 The restaurant simulation ........ 900 Distributing work ..................... 904 Performance tuning ........... 909 Comparing mutex technologies ................... 909 Lock-free containers .................. 916 Optimistic locking...................... 922 ReadWriteLocks .................... 923 Active objects ..................... 925 Summary ............................ 929 Further reading .......................... 931 Graphical User Interfaces 933 Applets ............................... 935 Swing basics ....................... 935 A display framework .................. 937 Making a button ................. 938 Capturing an event ............. 939 Text areas ........................... 941 Controlling layout .............. 942 BorderLayout ......................... 942 FlowLayout ............................. 943 GridLayout .............................. 944 GridBagLayout....................... 944 Absolute positioning .................. 945 BoxLayout ............................... 945 The best approach? .................... 945 The Swing event model ..... 945 Event and listener types ........... 946 Tracking multiple events ........... 951 A selection of Swing components ............ 953 Buttons ....................................... 953 Icons .......................................... 955 Tool tips ..................................... 957 Text fields ................................... 957 Borders ....................................... 959 A mini-editor.............................. 959 Check boxes .............................. 960 Radio buttons ............................. 961 Combo boxes (drop-down lists) ...................... 962 List boxes .................................. 963 Tabbed panes ............................. 965 Message boxes ........................... 965 Menus ......................................... 967 Pop-up menus ............................ 972 Drawing ...................................... 973 Dialog boxes ............................... 975 File dialogs .................................978 HTML on Swing components .................... 980 Sliders and progress bars ......... 980 Selecting look & feel ................... 981 Trees, tables & clipboard .......... 983 JNLP and Java Web Start ................... 983 Concurrency & Swing ........ 988 Long-running tasks ................... 988 Visual threading ........................ 994 Visual programming and JavaBeans ................... 996 What is a JavaBean? ................. 996 Extracting Beanlnfo with the Introspector ............ 998 A more sophisticated Bean ..... 1002 JavaBeans and synchronization ....................... 1005 Packaging a Bean .................... 1008 More complex Bean support .. 1009 More to Beans .......................... 1010 Alternatives to Swing ........ 1010 Building Flash Web clients with Flex ................ 1011 Hello, Flex ................................. 1011 Compiling MXML .................... 1012 MXML and ActionScript.......... 1013 Containers and controls........... 1013 Effects and styles ..................... 1015 Events ....................................... 1016
数组章节作业 1、将一个数组中的元素倒排过来,不能新开一个数组的临时存储空 间,只能在原数组上改。 2、写一个类用来模拟栈这种数据结构,要求底层 使用数组存储数据, 并给出相应的进栈和出栈的方法。MyStack int arr[]; int count;//栈中元素个数 public MyStack(int n){ arr = new int[n]; } boolean push(int num){ if(count==arr.length){} arr[count++]=num; } int pop(){ if(count==0){ return -1;} return arr[--count]; } 3、实现在一个数组指定位置添加元素和删除元素的功能。 1、数组容量问题? 2、添加元素前后数组中元素的变化 3、删除元素前后数组中元素的变化 面向对象章节作业 1,写一个类,名为Animal,该类有两个私有属性, name(代表动物的名字),和legs(代表动物的腿的条 数)。并提供个两构造方法,一个无参,默认给name 赋值为AAA,给legs赋值为4;另一个需要两个参数, 分别用这两个参数给私有属性赋值。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 2,写一个类Person,包含以下属性:String name; int age; boolean gender; Person partner。 为Person类写一个marry(Person p)方法,代表当前 对象和p结婚,如若可以结婚,则输出恭贺信息, 否则输出不能结婚原因。要求在另外一个类中写一 个主方法,来测试以上程序。(下列情况不能结婚: 结婚年龄,男<24,女<22;3,某一方已婚) 3,写一个类,名为Animal,该类有两个私有属性,name(代表动物的名字),和legs(代表动物的腿的条数);要求为两个私有属性提供public 的访问方法。并提个两构造方法,一个无参,默认给name赋值为AAA,给legs赋值为4;另一个需要两个参数,分别用这两个参数给私有属性赋值。要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 4,写一个类Fish,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值0;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Swimming!! 5,写一个类Bird,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值2;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Flying!! 6,写一个类Zoo,要求分别生成若干个Animal,Fish和Bird。并调用他们的属性和方法。 7,写Shape类,要求如下: 1.int类型属性x和y,分别表示图形的中心点坐标 2.无参构造器 3.构造器,对x和y进行初始化 4.draw()方法,输出"Shape draw" 写Circle类,继承Shape类,要求如下 1.double类型属性r,表示圆的半径 2.无参构造器,将r初始化为1.0 3.构造器,对r进行初始化 4.构造器,对x、y、r进行初始化 5.draw()方法,输出"draw in circle"和x,y,r的值 写Rectangle类,继承Shape类,要求如下 1.double类型属性height和width,表示矩形的高和宽 2.无参构造器,将height和width都初始化为1.0 3.构造器,对height和width进行初始化 4.构造器,对x、y、height、width进行初始化 5.draw()方法,输出"draw in rectangle"和x,y,height,width的值 使用ShapeTest类测试以上代码。 8,某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。 SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪 HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数 SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率 BasedPlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。 写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个函数,打印出某月每个员工的工资数额。注意:要求把每个类都做成完全封装,不允许非私有化属性。 容器类章节作业 1、写MyStack类,实现栈功能。在类中使用ArrayList保存数据。 2、使用TreeSet和Comparator,写TreeSetTest1 要求:对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 3、使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 4、使用TreeSet和Comparator,写TreeSetTestInner 要求: 对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 1. 使用匿名内部类实现 2. 使用静态内部类实现
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。<br>第1章 Java基础 <br>1.1 转换基本数据类型 <br>1.2 Java的运算符 <br>1.3 控制程序的流程 <br>1.4 计算阶乘 <br>1.5 实现命令行程序 <br>第2章 Java面向对象程序设计 <br>2. 1 复数类 <br>2. 2 equals.chashCode和clone方法 <br>2. 3 Java的参数传递 <br>2. 4 自定义形状类 <br>2. 5 类的加载顺序 <br>2. 6 方法和变量在继承时的覆盖与隐藏 <br>2. 7 排序类 <br>2. 8 Singleton单例模式 <br>2. 9 Factory工厂模式 <br>2. 10 Adapter适配器模式 <br>第3章 数字 <br>3. 1 数字与数字封装类 <br>3. 2 格式化数字 <br>3. 3 数字的舍入 <br>3. 4 转换数字的进制 <br>3. 5 生成随机数 <br>3. 6 处理大数字 <br>第4章 数组与集合 <br>4. 1 使用Arrays <br>4. 2 求质数. <br>4. 3 动态调整数组长度 <br>4. 4 矩阵 <br>4. 5 ArrayList. Vector和LinkedList <br>4. 6 生成不重复的随机数序列 <br>4. 7 自定义队列 <br>4. 8 对List排序 <br>4. 9 HashSet. LinkedHashSet和TreeSet <br>4. 10 列表. 集合与数组的互相转换 <br>4. 11 HashMap. Hashtable. LinkedHashMap和TreeMap <br>4. 12 对Map排序 <br>4. 13 Properties属性文件 <br>第5章 字符串 <br>5. 1 使用String <br>5. 2 基本数据类型与字符串的转化 <br>5. 3 判断Java标识符 <br>5. 4 使用StringBuffer <br>5. 5 IP地址转化成整数 <br>5. 6 18位身份证格式验证 <br>5. 7 表达式解析器 <br>5. 8 字符串编码的转换 <br>5. 9 字符串对齐器 <br>5. 10 密码加密与验证 <br>5. 11 制作命令行程序 <br>5. 12 使用StringTokenizer <br>5. 13 使用正则表达式操作字符串 <br>5. 14 使用正则表达式验证电话号码的格式 <br>第6章 Java异常处理 <br>6. 1 throw. throws. try和catch <br>6. 2 自定义异常类 <br>6. 3 使用finally <br>6. 4 使用异常的技巧与原则 <br>第7章 IO——输入输出流 <br>7. 1 获取文件的属性信息 <br>7. 2 列出指定目录下的文件 <br>7. 3 创建文件和目录 <br>7. 4 删除文件和目录 <br>7. 5 移动文件和目录 <br>7. 6 复制文件和目录 <br>7. 7 一个简单的文件搜索器 <br>7. 8 读文件 <br>7. 9 写文件 <br>7. 10 添加内容到文件尾 <br>7. 11 文件的分割与合并 <br>7. 12 从键盘接收数据并输出到文件 <br>7. 13 使用StreamTokenizer统计文件的字符数 <br>7. 14 序列化和反序列化对象 <br>7. 15 控制对象的序列化和反序列 <br>7. 16 读jar包的资源文件 <br>7. 17 用Zip格式压缩和解压缩文件 <br>7. 18 操作Excel文件 <br>7. 19 操作PDF文件 <br>7. 20 自定义日志文件类 <br>第8章 线程 <br>8. 1 定义和启动线程 <br>8. 2 停止线程 <br>8. 3 线程的互斥 <br>8. 4 线程的协作 <br>8. 5 线程join <br>8. 6 生产者. 消费者问题 <br>8. 7 线程优先级 <br>8. 8 列出虚拟机中所有的线程 <br>8. 9 守护线程Daemon <br>8. 10 线程池 <br>8. 11 一个死锁的例子 <br>8. 12 定时器Timer <br>第9章 Java GUI <br>9. 1 日历 <br>9. 2 开窗户游戏 <br>9. 3 标准型计算器 <br>9. 4 更改组件的外观 <br>9. 5 自定义对话框 <br>9. 6 制作欢迎画面 <br>9. 7 一个简单的编辑器 <br>9. 8 Swing的Drag和Drop <br>第10章 Java图形 <br>10. 1 一个圆形的按钮 <br>10. 2 捕捉屏幕 <br>10. 3 缩放图片 <br>10. 4 2D图形 <br>10. 5 3D图形.. <br>10. 6 一个时钟程序 <br>第11章 Java多媒体 <br>11. 1 滚动的消息 <br>11. 2 三维弹球 <br>11. 3 贪吃蛇游戏 <br>11. 4 Java声音处理 <br>11. 5 媒体播放器 <br>第12章 反射 <br>12. 1 instanceof操作符 <br>12. 2 获取类的信息 <br>12. 3 动态调用类的方法 <br>第13章 网络编程 <br>13. 1 获取URL的信息 <br>13. 2 Web浏览器 <br>13. 3 获取IP地址和域名 <br>13. 4 HTTP客户端 <br>13. 5 基本的Socket编程 <br>13. 6 HTTP服务器 <br>13. 7 一个支持多线程的服务器框架 <br>13. 8 代理服务器 <br>13. 9 Telnet客户端 <br>13. 10 UDP编程 <br>13. 11 聊天室服务器端 <br>13. 12 聊天室客户端 <br>13. 13 FTP客户端 <br>第14章 数据库 <br>14. 1 连接各种数据库 <br>14. 2 获得数据库和表的元数据 <br>14. 3 查询和更新数据库 <br>14. 4 批处理 <br>14. 5 提交与回滚事务 <br>14. 6 使用PreparedStatement <br>14. 7 读写二进制数据 <br>14. 8 读写Blob数据 <br>14. 9 使用ResultSet更新数据库 <br>14. 10 使用RowSet <br>14. 11 调用存储过程 <br>14. 12 一个数据库连接池 <br>第15章 Applet <br>15. 1 Applet时钟 <br>15. 2 处理鼠标和键盘事件 <br>15. 3 英文打字游戏 <br>15. 4 Applet间通信 <br>15. 5 汉诺塔游戏 <br>第16章 J2SE 5. 0新特性 <br>16. 1 自动装箱和拆箱 <br>16. 2 新的for循环 <br>16. 3 枚举类型 <br>16. 4 静态导入 <br>16. 5 可变长参数Varargs <br>16. 6 格式化输出 <br>16. 7 使用ProcessBuilder执行本地命令 <br>16. 8 泛型编程 <br>16. 9 注释功能Annotation <br>16. 10 监控与管理虚拟机 <br>16. 11 线程——Callable和Future <br>16. 12 线程——任务执行架构 <br>16. 13 线程——锁Lock <br>16. 14 线程——条件Condition <br>16. 15 线程——Semaphore <br>16. 16 线程——CountDownLatch <br>16. 17 线程——Cycli Barrier <br>16. 18 线程——Exchanger <br>16. 19 线程——BlockingQueue <br>第17章 Java与XML <br>17. 1 用DOM处理XML文档 <br>17. 2 用SAX处理XML文档 <br>17. 3 用XSLT转换XML <br>17. 4 对象与XML的转换 <br>第18章 Java Mail <br>18. 1 使用SMTP协议发送简单邮件 <br>18. 2 发送带附件的邮件 <br>18. 3 给多人发送邮件 <br>18. 4 使用POP3接收邮件 <br>第19章 JSP与Servlet <br>19. 1 获取客户端的真实IP地址 <br>19. 2 设置矛口读取Cookie <br>19. 3 JSP无刷新聊天室 <br>19. 4 上传文件 <br>19. 5 用Servlet生成图形验证码 <br>19. 6 用Servlet实现分页查看数据库 <br>
内容: 1 转换基本数据类型;运算符;计算阶乘; 2 复数类;java的参数传递;自定义形状类;类的加载顺序;方法和变量在继承时的覆盖和隐藏;排序类; 3数字 数字类;格式化数字;转换数字进制;生成随机数; 4数组和集合 使用Arrays类;动态调整数组长度;java为数据结构中的列表定义了一个接口类java.util.list同时提供了3个实现类,分别是ArrayList、Vector、LinkedList使用; 生成不重复的随机数序列;列表、集合与数组的互相转换;java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;IP地址转化成整数,整数转化成IP地址; 十八为身份证格式验证;表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序;使用正则表达式操作字符串;使用正则表达式验证电话号码的格式; 6java异常处理 throw和throws、try和catch;自定义异常类;使用finally;使用异常的技巧和原则; 7 IO输入输出流 获取文件的基本信息;列出指定目录下的文件,并可过滤文件;创建文件和目录;删除文件和目录;移动文件和目录; 复制文件和目录;一个简单的文件搜索器; 多种方式读文件内容, 按字节读取文件内容、按字符读取文件内容、按行读取文件内容、随机读取文件内容; 多种方式写文件内容, 按字节写文件内容、按字符写文件内容、按行写文件内容 ; 添加内容到文件结尾;文件的分割和合并;使用StreamTokenizer统计文件的字符数; 序列化和反序列化对象(将不长用的对象暂时持久化到文件中为对象的序列化,反之用时再把对象恢复到内存为反序列化); 控制对象的序列化和反序列化; 读jar包的资源文件;用zip格式压缩 和解压文件;操作Excel文件;操作Pdf文件;自定义日志文件类; 8线程 线程的启动 和停止;线程的互斥;线程的协作;线程join;生产者、消费者问题;线程的优先级;列出虚拟机中所有的线程;守护线程Daemon;线程池;一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务; 9 Java GUI 日历:使用swing和awt实现一个图形化的日历可以查询星期、日期和年份信息(CalenderTrain.java);标准计算器(Callulator.java);更改组建外观,对日历设置几个显示外观(lookandfeel.java);自定义对话框DialogWindows;制作欢迎界面SplashWindow.java; 10 java图形 一个圆形按钮,当单击按钮时颜色发生变化CircleButton.java; 捕捉屏幕相当于键盘上的PrintScreen,CsreenCaputure.java; 缩放图片JPGTransforme.java; 2d图形,实现一个2d画板,能够画2d的线、圆和矩形,能指定图形的颜色并且能够撤销和恢复图形,command.java; 3d图形,Graphic3d.java; 一个时钟程序,能够显示星期和日期,变化背景和透明度Clock.java; 11 java多媒体 滚动的消息,实现一个简单的动画,具有滚动效果的文本消息RollingMessage.java; 三维弹球,BouncingB.java; 贪吃蛇游戏SnakeModel.java; java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身进行检查,并能直接操作程序的内部属性; instanceof操作符,instanceof.java; 获取类的信息,ViewClassInfoJrame.java; 动态调用类的方法,CallMetod.java; 13、网络编程 获取URL信息,主要是使用URLConnection类,GetUrlInfo.java; web浏览器,webbrowser.java; 获取IP地址和域名,GetIpAddress.java; Http客户端,httpClient.java; 基本socket编程,介绍socket编程的基本步骤,启动socket服务器后,在打开socket的客户端,在输入框里输入消息发送到服务器,服务器受到消息后返回给客户端; Http服务器,httpsever.java; 一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; UDP编程,包括收发udp报文; 聊天室服务器端,Chatserver.java;聊天室客户端,ChatClient.java; Ftp客户端,Mainframe.java; 14数据库 连接各种数据库DBconnector.java; 获得数据库和表的元数据Getmetadata.java; 查询和更新数据库OperateDatadb.java; 批处理,介绍如何一次执行一批sql语句,这些sql语句用插入、更新和删除等相关操作; 提交和回滚transaction.java; 使用PreparedStatement,动态执行sql语句,UsingPreparedStatement.java; 读写二进制数据,BinaryData.java; 读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,.UsingRowSet.java; 调用存储过程,StorageProcedure.java; 一个数据库连接池,JDBCInfo.java; 15 applet java可以编写两类程序,applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容java的web浏览器中运行的程序; applet时钟,Clock.java; 处理鼠标和键盘,用户在applet上按下键盘时,该实列能把按下的建显示出来,点击鼠标时能把鼠标事件和鼠标坐标显示出来,MouseAndKeyapplet.java; 英文打字小游戏,TypingGame.java; applet间通信; 汉诺塔游戏, 16 j2se5.0 新特性 自动装箱和拆箱; 新的for循环; 枚举类型; 静态导入; 格式化输出; 使用ProcessBuilder执行本地命令; 泛型编程; 监控和管理虚拟机;新的线程执行架构; 线程锁; 线程条件; 线程同步装置:semaphore countdownlatch cyclicbarrier exchanger; 17 java与xml 用dom处理xml文档; 用sax处理xml文档; 用xslt转换xml; 对象与xml的转换; 18 java mail 使用smtp协议发送简单邮件; 发送带附件的邮件; 给多人发送邮件; 使用pop3接收邮件; 19jsp与servlet 获取客户端的真实ip地址; jsp无刷新聊天室; 设置和读取cookie; 上传文件; 用servlet生成图形验证码; 用servlet实现分页查看数据库;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值