1.编写一个Worker类,为Worker类添加相应的代码,使得Worker对象能正确放入TreeSet中。并编写相应的测试代码。
/**
* Worker类
*/
public class Worker implements Comparable<Worker>{
/**
* 私有属性
*/
private String name;
private int age;
private double salary;
/**
* 构造方法
*/
public Worker() {
} public Worker(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
/**
* getter setter方法
*/
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 double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} /**
* 重写toString方法
*/
public String toString(){
return "工人信息 : { "+"姓名 = "+name+","+"年龄 = "+age+","+"薪水 = "+salary+" }";
} /**
* 重写compareTo方法:按年龄从小到大排序,年龄相同按名字的字典顺序排列
*/
@Override
public int compareTo(Worker other) {
if (this.age != other.age){
return this.age - other.age;
}else {
return this.name.compareTo(other.getName());
}
}
}
/**
* 测试类
*/
public class TestWorker {
public static void main(String[] args) {
/**
* 创建Worker对象,通过构造方法完成赋值
*/
Worker w1 = new Worker("F",27,5500);
Worker w2 = new Worker("E",28,6500);
Worker w3 = new Worker("B",26,5800);
Worker w4 = new Worker("A",26,5300);
/**
* 创建TreeSet集合存放工人数据信息
*/
Set<Worker> set = new TreeSet<Worker>();
set.add(w1);
set.add(w2);
set.add(w3);
set.add(w4);
/**
* 遍历Set,输出结果
*/
for(Worker w : set){
System.out.println(w);
}
}
}

运行结果:

2.设计一个多线程的程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有10个售票窗口同时售票,用10个线程模拟这10个售票窗口的售票情况。

/**
* 定义售票类实现Runnable接口
*/
public class SaleTicket implements Runnable {
/**
* 定义初始变量
* total--总票数
* count--票号(从0开始)
*/
public int total = 100;
public int count = 0; /**
* 重写run()方法
*/
@Override
public void run() {
while (total > 0){
synchronized (this){
if (total > 0){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 票号++
* 总票数--
*/
count++;
total--;
System.out.println(Thread.currentThread().getName()+"售出票号为:"+count+
" 的票"+"当前余票为:"+total);
}
}
}
}
}
/**
* 测试类
*/
public class TestSaleTicket {
public static void main(String[] args) {
/**
* 创建线程对象,启动线程
*/
SaleTicket st = new SaleTicket();
/**
* 使用循环创建启动线程
*/
for (int i = 1;i <= 5;i++){
Thread t = new Thread(st,i+"号售票窗口");
t.start();
}
/**
* 也可以手动创建5个线程并启动,代码稍显复杂
*/
SaleTicket st1 = new SaleTicket();
Thread t1 = new Thread(st1);
Thread t2 = new Thread(st1);
Thread t3 = new Thread(st1);
Thread t4 = new Thread(st1);
Thread t5 = new Thread(st1);
t1.setName("窗口6");
t2.setName("窗口7");
t3.setName("窗口8");
t4.setName("窗口9");
t5.setName("窗口10");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}

运行结果:

**各线程随机执行售票功能

3.对一个数组进行折半查找,使用递归和非递归实现。

/**
* 递归实现数组的折半查找
*/
public class TestRecursionBinarySearch {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int key = 1;
int index = recursionBinarySearch(array,key);
System.out.println(key+"的索引是"+index);
}
public static int recursionBinarySearch(int[] arr,int key){
int start = 0;
int end = arr.length - 1;
return recursionBinarySearch(arr,start,end,key);
} private static int recursionBinarySearch(int[] arr, int start, int end, int key) {
/**
* 递归的结束条件
*/
if (start > end){
return -1;
}
/**
* 计算中间索引并获得其值
*/
int mid = (start + end) / 2;
int value = arr[mid];
/**
* 进行比较查询
*/
if (key > value){
start = mid + 1;
return recursionBinarySearch(arr,start,end,key);
}else if (key < value){
end = mid - 1;
return recursionBinarySearch(arr,start,end,key);
}else {
return mid;
}
}
}

运行结果:

/**
* 非递归实现数组的折半查找
*/
public class TestBinarySearch {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int key = 7;
int index = binarySearch(array,key);
System.out.println(key+"的索引是"+index);
}
public static int binarySearch(int[] arr,int key){
/**
* 定义起始位置和结束位置索引号,第一次查找从两头开始(即start和end)
*/
int start = 0;
int end = arr.length - 1;
//System.out.println("-1 代表要查的元素不在此数组中");
while (start <= end){
/**
* 计算中间索引号,得到对应元素值
*/
int mid = (start + end) / 2;
int value = arr[mid];
/**
* 将要查找的元素key值和中间元素比较
*/
if (key == value){
return mid;
}else if (key < value){
end = mid - 1;
}else {
start = mid + 1;
}
}
return -1;
}
}

运行结果:

JavaSE编码试题强化练习4的更多相关文章

  1. JavaSE编码试题强化练习1

    1. 编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 定义父类--圆类 */ public class Circle { / ...

  2. JavaSE编码试题强化练习7

    1.编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 圆类 */ public class Circle { /** * 类属 ...

  3. JavaSE编码试题强化练习6

    1.写出选择排序的代码实现,对一个int数组进行排序 public class TestSelectSort { public static void main(String[] args) { in ...

  4. JavaSE编码试题强化练习5

    1.不使用函数实现字符串的翻转 /** * 1.不使用函数实现字符串的翻转 */ public class TestStringReverse { public static void main(St ...

  5. JavaSE编码试题强化练习3

    1.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐. public class TestCirculation { public static void ma ...

  6. JavaSE编码试题强化练习2

    1.编写递归算法程序:一列数的规则如下: 0.1.1.2.3.5.8.13.21.34...... 求数列的第40位数是多少. public class TestRecursion { public ...

  7. JavaSE面试题

    JavaSE面试题 欢迎到我的Git仓库去提交您觉得优秀的内容! 1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.当一个static方法被调用时,可能还没有创建任何实例 ...

  8. [002] - JavaSE面试题(二):基本数据类型与访问修饰符

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...

  9. JavaSE 面试题: 类初始化和实例初始化等

    JavaSE 面试题 类初始化和实例初始化等 class Father { private int i = test(); private static int j = method(); stati ...

随机推荐

  1. 021-制作OpenStack镜像官方文档

    可参考官方文档:https://docs.openstack.org/image-guide/ 制作centos7 :https://docs.openstack.org/image-guide/ce ...

  2. Codeforces 957 水位标记思维题

    A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...

  3. 模块打包 webpack

    1.模块打包工具 2.工作方式: 1)将存在依赖关系的模块按照特定规则合并为单个JS文件,一次全部加载进页面中 2)在页面初始时加载一个入口模块,其他模块异步的进行加载 3.优势: 1)支持AMD,C ...

  4. 1.docker容器技术基础入门

    内容来自:https://www.cnblogs.com/marility/p/10215062.html https://blog.51cto.com/gouyc/2310785?source=dr ...

  5. MySQL--limit使用注意

    limit m,n 的意义是在选择.查询得到的结果中,从第m条开始,拿连续的n条作为结果返回.根据它的原理可以知道,select ....limit m,n时要扫描得到的数据条数是m+n条.这就导致m ...

  6. Django数据库查询优化与AJAX

    目录 数据库设计三大范式 orm相关的数据库查询优化 惰性查询 all.only与defer select_related与prefetch_related MTV与MVC模型 MTV(models ...

  7. 在mac上安装rabbitmq

    在 OS X 上安装 RabbitMQ¶ 在 Snow Leopard 上安装 RabbitMQ 最简单的方式就是 Homebrew ——OS X 上的一款新颖别致,光彩动人的包管理系统. 在本例中, ...

  8. windows10 ubuntu子系统 WSL文件位置

    windows10 的linux子系统(windows subsystem for linux)WSL 文件位置 以我的系统为例,WSL的root目录对应windows的: C:\Users\xiao ...

  9. 运行job检验单元测试覆盖率

    http://ns.jenkins.baidu.com/user/anyixing/my-views/view/Map_ut/job/poi-zhunru/ 1在http://ns.jenkins.b ...

  10. Spring整合Hibernate实现Spring Data JPA (介绍和使用)

    Spring Data JPA是Spring基于Hibernate开发的一个JPA框架.如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便. 但是Sprin ...