目录
一、选择题
二、编程题
2.1最近公共祖先
2.2求最大连续bit数
一、选择题
1.下面哪个标识符是合法的?
A. 9HelloWorld
B. _Hello World
C. Hello*World
D. Hello$World
java标识符的命名规则应以字母、下划线、美元符开头,后跟字母、下划线、美元符或数字 Java标识符大小写敏感,长度无限制。
所以正确答案是 D
2.以下java程序代码,执行后的结果是()
java.util.HashMap map=new java.util.HashMap();
map.put("name",null);
map.put("name","Jack");
System.out.println(map.size());
A. 0
B. null
C. 1
D. 2
在HashMap中是不允许相同键出现的,如果已经有了这个键,那么值会覆盖。
所以正确答案是 C
3.Java集合 Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述错误的是()
A. ArrayList和LinkedList均实现了List接口
B. ArrayList的访问速度比LinkedList快
C. 添加和删除元素时,ArrayList的表现更佳
D. HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
ArrayList和LinkedList均实现了List接口。 ArrayList的访问速度比LinkedList快,LinkedList还需要遍历,ArrayList直接输入对应索引即可。添加和删除元素时,LinkedList的表现更佳不需要扩容前移后移。HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值 。
所以正确答案是 C
4.Java 以下描述正确的是
A. CallableStatement是PreparedStatement的父接口
B. PreparedStatement是CallableStatement的父接口
C. CallableStatement是Statement的父接口
D. PreparedStatement是Statement的父接口
CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement。
所以正确答案是 B
5.下面有关重载函数的说法中正确的是()
A. 重载函数必须具有不同的返回值类型
B. 重载函数形参个数必须不同
C. 重载函数必须有不同的形参列表
D. 重载函数名可以不同
重载的函数名称必须相同,参数列表必须不同,其他都是可以不同可以相同。
所以正确答案是 C
6.下列关于容器集合类的说法正确的是?
A. LinkedList继承自List
B. AbstractSet继承自Set
C. HashSet继承自AbstractSet
D. WeakMap继承自HashMap
List是接口,LinkedList实现了List接口,而非继承,AbstractSet同理是实现了Set接口。HashSet继承自AbstractSet同时它还实现了Set接口,WeakMap不是Java集合框架中的类。
所以正确答案是 C
7.ArrayList list = new ArrayList(20);中的list扩充几次
A. 0
B. 1
C. 2
D. 3
没有扩充,因为数组扩充是在长度不够的情况下,本题中定义的时候就设置为20,并没有向里面添加超过该长度的值,所以不扩充。
所以正确答案是 A
8.以下程序的输出结果是?
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public static void change(String str, char ch[])
{
str = "test ok";
ch[0] = 'g';
}
}
A. good and abc
B. good and gbc
C. test ok and abc
D. test ok and gbc
在change方法中,str是形参改变不了ex.str,ch也是形参,但是ch对象的指向和ex.ch是一样的,改变了ch指向的值,那么ex.ch同时也改变了。
所以正确答案是 B
9.下面的方法,当输入为2的时候返回值是多少?
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A. 0
B. 2
C. 4
D. 10
因为这里case后面没有加break,所以从case 2开始一直往下运行。
所以正确答案是 D
10.提供Java存取数据库能力的包是( )
A. java.sql
B. java.awt
C. java.lang
D. java.swing
提供Java存取数据库能力的包是java.sql。java.awt是图形界面的包;java.lang是Java中常用方法最多的包,定义了Java中的大多数基本类;java.swing是图形界面包。
所以正确答案是 A
二、编程题
2.1最近公共祖先
将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。
在二叉树中树根编号为1,那么除树根外的所有节点的父节点编号都是子节点/2。
两个结点中找出大的和小的,只要两者不相等,就一直让两者/=2下去,直到两者相等,找到公共结点。
public static int getLCA(int a, int b) {
int max = Math.max(a,b);
int min = Math.min(a,b);
while(max!=min){
while(max>min){
max/=2;
}
while(min>max){
min/=2;
}
}
return max;
}
2.2求最大连续bit数
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 数据范围:数据组数:1\le t\le 5\1≤t≤5 ,1\le n\le 500000\1≤n≤500000
本题思路很简单,利用两个变量count和max来解答,进入循环一遍一遍将n/=2直到n为0,如果n%2==1,那么count就+1,如果max比count小,那么就将count的值赋予max。如果不等于1,count置空。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext() ){
int n = sc.nextInt();
int count = 0;
int max = 0;
while(n!=0){
if(n%2==1){
count++;
max = Math.max(count,max);
}else{
count = 0;
}
n = n/2;
}
System.out.println(max);
}
}
}