javase階段考試三(集合、內部類)測試題及答案
一、 簡答題(每題5分,共計30分)
1. 請寫出匿名內部類的語法格式以及作用。
父類型別/介面型別 引用名 = new 父類型別/介面型別(){
進行方法的重寫;
};
用於隱含實現一個介面或實現一個類,該類沒有類名。
2. 簡述常用的8種包裝類以及對應的基本資料型別。
java.lang.Integer類 - 是int型別的包裝類。
java.lang.Double類 - 是double型別的包裝類。
java.lang.Float類 - 是float型別的包裝類
java.lang.Byte類 - 是byte型別的包裝類。
java.lang.Short類
java.lang.Long類 - 是long型別的包裝類。
java.lang.Boolean類 - 是boolean型別的包裝類。
java.lang.Charater類 - 是char型別的包裝類。簡述””和null之間的區別。
3. 簡述String類、StringBuilder類以及StringBuffer類之間的主要區別。
String類用於描述字串字面值,是個常量不可改變。
StringBuilder類描述可變字元序列,屬於非執行緒安全的類,執行效率高。
StringBuffer類描述可變字元序列,屬於執行緒安全的類,執行效率低。
4. 請寫出String類中常用的方法名和功能(至少寫出5個)。
char charAt(int index) - 主要用於返回指定下標對應的字元,下標從0開始。
int length() - 主要用於返回字串的長度。
String toUpperCase() - 將所有的字元轉換為大寫。
String toLowerCase() - 將所有的字元轉換為小寫。
static String valueOf(int i ) - 主要用於將引數轉換為字串並返回。
String trim() - 返回字串副本,忽略前面和後面的空白。
5. 簡述List介面的特性和主要實現類的底層實現。
java.util.List介面是
該介面的主要實現類有:ArrayList類、LinkedList類、Stack類、Vector類(筆試)。
其中ArrayList類的底層是採用動態陣列實現的,增刪元素不方便,訪問元素方便。
其中LinkedList類的底層是採用連結串列實現的,增刪元素方便,訪問元素不方便。
其中Stack類(棧)的底層是採用動態陣列實現的,該類是一種具有後進先出特性的資料結構,簡稱為LIFO(last in first out)。
其中Vector類的底層是採用動態陣列實現的,與ArrayList類相比,是屬於執行緒安全的類,因此效率比較低,推薦使用ArrayList類。
6. 寫出常見的5種異常型別,要求寫出英文名稱以及漢語解釋。
ArithmeticException類 - 算數異常。
ArrayIndexOutOfBoundsException - 陣列下標越界異常(間接子類)。
NullPointerException - 空指標異常。
ClassCastException - 型別轉換異常。
NumberFormatException - 數字格式異常(間接子類)。
二、畫圖題(每圖5分,共10分)
1. 畫出框架類相關的兩張圖。
2. 畫出一棵二叉樹並標出根節點、枝節點、葉子節點,以及高度和大小。
三、程式設計題(每題12分,共60分)
1. 統計字串“[email protected]#$%^”中大寫字母、小寫字母、數字字元以及其它字元個數並列印。
public class TestCount {
public static void main(String[] args) {
String str = "[email protected]#$%^";
int[] count = new int[4];
for (int i = 0; i < str.length(); i++) {
if('a' <= str.charAt(i) && str.charAt(i) <= 'z'){
count[0]++;
}else if('A' <= str.charAt(i) && str.charAt(i) <= 'Z'){
count[1]++;
}else if('0' <= str.charAt(i) && str.charAt(i) <= '9'){
count[2]++;
}else{
count[3]++;
}
}
System.out.println("小寫字母有" + count[0] + "個");
System.out.println("大寫字母有" + count[1] + "個");
System.out.println("數字字元有" + count[2] + "個");
System.out.println("其他字元有" + count[3] + "個");
}
}
2. 程式設計實現Student類的封裝並重寫equals()、hashCode()以及toString()方法,屬性有:學號和姓名。
public class Student {
private int id;
private String name;
public Student() {
super();
}
public Student(int id, String name) {
super();
setId(id);
setName(name);
}
public int getId() {
return id;
}
public void setId(int id) {
if(id > 0){
this.id = id;
}else{
System.out.println("學號不合理!!!");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
3. 根據上述Student類向List集合中放入3個學生資訊,然後使用4種方式進行列印。
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class TestListPrint {
public static void main(String[] args) {
//1.準備一個List集合
List<Student> lt1 = new LinkedList<Student>();
//2.放入元素
lt1.add(new Student(1001,"王二"));
lt1.add(new Student(1002,"張三"));
lt1.add(new Student(1003,"李四"));
//3.使用toString()方法列印所有元素
System.out.println("lt1 = " + lt1);
System.out.println("-----------------------------");
//4.使用迭代器方式列印所有元素
Iterator<Student> it = lt1.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("------------------------------");
//5.使用for each列印所有元素
for(Studentig : lt1){
System.out.println(ig);
}
System.out.println("-----------------------------");
//6.使用get()方法列印所有元素
for(int i = 0; i < lt1.size(); i++){
System.out.println(lt1.get(i));
}
}
}
4. 定義一個樂器(Instrument)介面,其中有抽象方法void play();在InstrumentTest類中,定義方法void playInstrument(Instrument ins);要求在該類的main方法中呼叫上述方法,採用兩種方式實現。
public interface Instrument {
public abstract void play();
}
public class InstrumentTest implements Instrument{
@Override
public void play() {
System.out.println("使用多型");
}
private static void playInstrument(Instrument ins) {
ins.play();
}
public static void main(String[] args) {
// 第一種
Instrument ins1 = new InstrumentTest();
playInstrument(ins1);
//第二種
Instrument ins2 = new Instrument() {
@Override
public void play() {
System.out.println("使用匿名內部類");
}
};
playInstrument(ins2);
}
}
5. 使用Map集合統計字串中“123, 456, 789, 123, 456”中每個整數出現的次數並打印出來。
import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
String str = "123,456,789,123,456";
String[] s = str.split(",");
Map<String,Integer> m = new HashMap<String,Integer>();
for (int i = 0; i < s.length; i++) {
if(m.containsKey(s[i])){
m.put(s[i], m.get(s[i])+1);
}else{
m.put(s[i], 1);
}
}
System.out.println(m);
}
}