7.27做業

 

容器做業java

1、 填空題面試

  1. Java集合框架提供了一套性能優良、使用方便的接口和類,包括CollectionMap兩大類,它們都位 ___java.Util__________ 包中
  2. 隊列和堆棧有些類似,不一樣之處在於 _隊列是先進先出,堆棧是先進後出___________
  3. ______鏈表_______ 結構是一種由多個節點組成的線性數據結構,而且每一個節點包含有數據以及指向下一個節點的引用。
  4. _________linkedList_____是一種集合類,它 採用鏈表做爲的存儲結構,便於刪除和添加元素,可是按照索引查詢元素效率低下。
  5. ___________TreeSet__ 是一種Collection類型的集合類,其中元素惟一,並採用二叉樹做爲存儲結構,元素按照天然順序排列。
  6. 若是但願將自定義類Student的多個對象放入集合TreeSet,實現全部元素按照某個屬性的天然順序排列,則須要Student類實現____Comparable___接口。
  7. Java ___________Map__ 集合的訪問時間接近穩定,它是一種鍵值對映射的數據結構。這個數據結構是經過數組來實現的。
  8. 迭代器Iterator爲集合而生,專門實現集合遍歷,該接口有三個方法,分別是hasNext() ______next()______remove()

 

2、 選擇題數組

1.安全

如下選項中關於Java集合的說法錯誤的是AC   )。(選擇二項)數據結構

 

 

 

 

A.框架

List接口和Set接口是Collections接口有兩個子接口ide

 

B.工具

List接口中存放的元素具備有序,不惟一的特色性能

 

C.this

Set接口中存放的元素具備無序,不惟一的特色

 

D.

Map接口存放的是映射信息,每一個元素都是一個鍵值對

 

2.

以下Java代碼,輸出的運行結果是(  A  )。(選擇一項)

 

public class Test {

public static void main(String[ ] args) {

List<String> list=new ArrayList<String>();

list.add("str1");

list.add(2, "str2");

String s=list.get(1);

System.out.println(s);

}   下標越界異常

}

 

 

 

 

A

運行時出現異常

 

B.

正確運行,輸出str1

 

C.

正確運行,輸出str2

 

D.

編譯時出現異常

 

3.

如下Java代碼的做用是首先將一個數組的內容存入集合,而後判斷集合中是否有指定的元素存在,其中共有(  D  )處錯誤。(選擇一項)

 

import java.util.List;

public class Test {

public int getIndexofArray(float[] f){

int rtn=-1;

float objf=3.4;1

List list=null;2

for(int i=0;i<f.size( );i++){3

list.add(f[i]);

}

for(int i=0;i<list.size( );i++){

float tmp=(float)list.get(i);

if(objf==tmp){

rtn=i;

}

}

return rtn;

}

}

 

 

 

 

A

0

 

B.

1

 

C.

2

 

D.

3

 

4.

分析以下Java 代碼,編譯運行後將輸出( B   )。(選擇一項)

 

public class Test {

public Test() {

}

static void print(List<Integer> al) {

al.add(2);

al = new ArrayList<Integer>();

al.add(3);

al.add(4);

}

public static void main(String[] args) {

List<Integer> al = new ArrayList<Integer>();

al.add(1);

print(al);

System.out.println(al.get(1));

}

}

 

 

 

 

A

1

 

B.

2

 

C.

3

 

D.

4

 

5.

Java,下列集合類型能夠存儲無序、不重複的數據的是(  D  )。(選擇一項)

 

 

 

 

A

ArrayList

 

B.

LinkedList

 

C.

TreeSet

 

D.

HashSet

 

6.

如下代碼的執行結果是(  C  )。(選擇一項)

 

Set<String> s=new HashSet<String>();

s.add("abc");1

s.add("abc");1

s.add("abcd");2

s.add("ABC");3

System.out.println(s.size());

 

 

 

 

A.

1

 

B.

2

 

C.

3

 

D.

4

 

7.

給定以下Java代碼,編譯運行的結果是(  C  )。(選擇一項)

 

public class Test {

public static void main(String[] args) {

Map<String, String> map = new HashMap<String, String>();

String s = "code";

map.put(s, "1");

map.put(s, "2");

System.out.println(map.size());

}元素的個數

}

 

 

 

 

A

編譯時發生錯誤

 

B.

運行時引起異常

 

C.

正確運行,輸出:1

 

D.

正確運行,輸出:2

 

8.

下面集合類中屬於非線程安全,且結構採用了哈希表的是(  C  )。(選擇一項)

 

 

 

 

A.

Vector

 

B.

ArrayList

 

C.

HashMap

 

D.

Hashtable

 

9.

 

Java中,LinkedList類與ArrayList類同屬於集合框架類,下列( CD )選項中是LinkedList類有而ArrayList類沒有的方法。(選擇兩項)

 

 

 

 

A

add(Object o)

 

B.

add(int index,Object o)

 

C.

getFirst()

 

D.

removeLast()

 

3、 判斷題

  1. 數組和集合中的元素能夠是任何數據類型,包括基本類型和引用類型。( ✖  )
  2. Java集合中的Set接口和List接口都是從Collection接口派生出來的。(  ✔  )
  3. Collection 接口存儲一組不惟一,有序的對象,它有兩個子接口:ListSet。(  ✖  無序
  4. CollectionJava集合頂級接口,其中的元素無序,惟一。Java平臺不提供這個接口任何直接的實現。( ✖   )不惟一
  5. List是有序的Collection,使用此接口可以精確的控制每一個元素插入的位置。用戶可以使用索引來訪問List中的無素,這相似於Java的數組。(  ✔  
  6. HashSet採用哈希表存儲結構,特色是查詢速度快,可是其中元素無序排列。(  ✔  
  7. LinkedHashMap是一種有序的HashMap,查詢速度快,便於添加刪除操做。(  ✔  )
  8. 基本數據類型的值能夠被直接存儲在Vector對象中。(  ✖  )
  9. Dictionary創建了關鍵字和值的映射,只要提供一個關鍵字,Dictionary就會返回一個相應的值。(  ✔  )
  10. 泛型是JavaSE1.7的新特性,泛型的本質是參數化類型,也就是說所操做的數據類型被指定爲一個參數。Java語言引入泛型的好處是安全簡單。(  ✖  
  11. Collection是專門操做集合的工具類,提供一系列靜態方法實現對各類集合操做。( ✖   )
  12. Iterator接口能夠遍歷任何Collection接口的實現類,能夠從一個Collection中使用iterator( )方法來獲取迭代器實例。迭代器取代了Java集合框架中的Enumeration。(  ✔ 

 

4、 簡答題 (首先熟練掌握筆記上 與集合相關的面試簡答題)

  1. 熟練掌握Collection集合Map集合的體系圖 
  2. 簡述ListSetCollectionMap特色和區別及何時使用該集合

Collection是Java集合頂級接口,存儲一組不惟一,無序的對象;
Map集合是存儲鍵值對的集合,特色:key 惟一  value  容許重複  
List接口和Set接口是Collections接口有兩個子接口;
List 接口存儲一組不惟一,有序的對象;
Set 接口存儲一組惟一,無序的對象;

  1. VectorArrayList的區別和聯繫。

實現原理相同,功能相同,都是長度可變的數組結構,不少狀況下能夠互用 
二者的主要區別以下 
Vector是早期JDK接口,ArrayList是替代Vector的新接口 
Vector線程安全,效率低下;ArrayList重速度輕安全,線程非安全 

  1. 請你簡述HashMapHashtable的區別?

實現原理相同,功能相同,底層都是哈希表結構,查詢速度快,在不少狀況下能夠互用
二者的主要區別以下
Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口
Hashtable繼承Dictionary類,HashMap實現Map接口
Hashtable線程安全,HashMap線程非安全
Hashtable不容許null值,HashMap容許null值

 

5、 編碼題 (首先熟練掌握筆記上 與集合相關的需求小案例)

 

  1. 使用ListMap存放多個圖書信息,遍歷並輸出。其中商品屬性:編號,名稱,單價,出版社;使用商品編號做爲Map中的key

 

package test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; public class Books { String id; // 編號
    String name; // 名稱
    double price; // 價格
    String press; // 出版社 // 全參構造方法
 
    public Books(String id, String name, double price, String press) { super(); this.id = id; this.name = name; this.price = price; this.press = press; } // 重寫toString()
 @Override public String toString() { return "Books [id=" + id + ", name=" + name + ", price=" + price + ", press=" + press + "]"; } public static void main(String[] args) { // new5個圖書對象
        Books b1 = new Books("001", "第1本書", 55.8, "第1出版社"); Books b2 = new Books("002", "第2本書", 49.9, "第2出版社"); Books b3 = new Books("003", "第3本書", 55.0, "第3出版社"); Books b4 = new Books("004", "第4本書", 48.5, "第4出版社"); Books b5 = new Books("005", "第5本書", 55.8, "第5出版社"); Books b6 = new Books("006", "第6本書", 53.6, "第6出版社"); // new一個List對象
        List<Books> l = new ArrayList<Books>(); // 添加圖書對象到l
 l.add(b1); l.add(b2); l.add(b3); l.add(b4); l.add(b5); l.add(b6); // 遍歷輸出
        for (Books s : l) { System.out.println(s); } System.out.println("======================================================"); // new一個HashMap對象
        HashMap<String, Books> hm = new HashMap<String, Books>(); // 以編號作爲key添加圖書對象到hm
 hm.put(b1.id, b1); hm.put(b2.id, b2); hm.put(b3.id, b3); hm.put(b4.id, b4); hm.put(b5.id, b5); hm.put(b6.id, b6); // 得到全部key
        Set<String> ss = hm.keySet(); // 遍歷輸出
        for (String s : ss) { System.out.println(hm.get(s)); } } }

 

  1. 使用HashSetTreeSet存儲多個商品信息,遍歷並輸出;其中商品屬性:編號,名稱,單價,出版社;要求向其中添加多個相同的商品,驗證集合中元素的惟一性。

提示:向HashSet中添加自定義類的對象信息,須要重寫hashCodeequals( )

 TreeSet中添加自定義類的對象信息,須要實現Comparable接口,指定比較規則

 

package test; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; import bean.TestSet; public class TestSett { public static void main(String[] args) { TestSet b1 = new TestSet(1994, "b1", 15.5, "wty"); TestSet b1 = new TestSet(1994, "b1", 30, "wty"); TestSet b2 = new TestSet(1994, "b2", 50, "wty"); TestSet b3 = new TestSet(1993, "b3", 15.5, "wty"); TestSet b4 = new TestSet(1992, "b4", 15.5, "wty"); TestSet b5 = new TestSet(1991, "b5", 50, "wty1"); //使用HashSet存儲圖書並遍歷
            Set<TestSet> hashSet = new HashSet<TestSet>(); hashSet.add(b1); hashSet.add(b1); hashSet.add(b2); hashSet.add(b3); hashSet.add(b4); hashSet.add(b5); hashSet.add(b1_1); System.out.println("遍歷輸出hashset"); System.out.println(hashSet.size()); for(TestSet book:hashSet){ System.out.println(book.toString()); } //使用TreeSet存儲圖書並遍歷
                Set<TestSet> treeSet = new TreeSet<TestSet>(); treeSet.add(b1); treeSet.add(b1); treeSet.add(b2); treeSet.add(b3); treeSet.add(b4); treeSet.add(b5); treeSet.add(b1_1); System.out.println("遍歷輸出treeset"); System.out.println(treeSet.size()); for(TestSet book:treeSet){ System.out.println(book.toString()); } } } package bean; public class TestSet implements Comparable<TestSet> { public int id; public String name; public double price; public String press; public TestSet() { super(); } public TestSet(int id, String name, double price, String press) { super(); this.id = id; this.name = name; this.price = price; this.press = press; } public int compareTo(TestSet o) { return this.id-o.id; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((press == null) ? 0 : press.hashCode()); long temp; temp = Double.doubleToLongBits(price); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; TestSet other = (TestSet) obj; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (press == null) { if (other.press != null) return false; } else if (!press.equals(other.press)) return false; if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price)) return false; return true; } @Override public String toString() { return "Book [id=" + id + ", name=" + name + ", press=" + press+ ", price=" + price + "]"; } }

 

  1. 實現ListMap數據的轉換。具體要求以下:

功能1:定義方法public void listToMap( ){ }ListStudent元素封裝到Map

1) 使用構造方法Student(int id,String name,int age,String sex )建立多個學生信息並加入List

2) 遍歷List,輸出每一個Student信息

3) List中數據放入Map,使用Studentid屬性做爲key,使用Student對象信息做爲value

4) 遍歷Map,輸出每一個Entrykeyvalue

功能2:定義方法public void mapToList( ){ }MapStudent映射信息封裝到List

1) 建立實體類StudentEntry,能夠存儲Map中每一個Entry的信息

2) 使用構造方法Student(int id,String name,int age,String sex )建立多個學生信息,並使用Studentid屬性做爲key,存入Map

3) 建立List對象,每一個元素類型是StudentEntry

4) Map中每一個Entry信息放入List對象

 

 

6、 可選題

  1. 假若有如下email數據「aa@sohu.com,bb@163.com,cc@sina.com,..」現須要把email中的用戶部分和郵件地址部分分離,分離後以鍵值對應的方式放入HashMap

 

package test; import java.util.HashMap; import java.util.Map; public class Email { public static void main(String[] args) { String str = "aa@sohu.com,bb@163.com,cc@sina.com"; System.out.println(str); //獲得每個email
            String strs[] = str.split(","); //存放分離後email的信息
            Map<String,String> emailMap = new HashMap<String, String>(); for(String email:strs){ String temp[] = email.split("@"); //分割email存入map
                emailMap.put(temp[0], temp[1]); } System.out.println(emailMap.toString()); } }

 

 

 

  1. 由控制檯按照固定格式輸入學生信息,包括學號,姓名,年齡信息,當輸入的內容爲exit退出;將輸入的學生信息分別封裝到一個Student對象中,再將每一個Student對象加入到一個集合中,要求集合中的元素按照年齡大小正序排序;最後遍歷集合,將集合中學生信息寫入到記事本,每一個學生數據佔單獨一行。

推薦步驟:

a) 建立Student類,並指定按照年齡正序排列

b) 經過控制檯輸入多個不一樣Student信息。格式規定爲:編號#姓名#年齡

c) 取出字符串中相應信息放入Student對象,並將Student加入到集合中

d) 遍歷集合的過程當中將學生的信息輸入到記事本

難點:

e) 如何指定學生按照年齡正序排列

f) 若是從字符串「編號#姓名#年齡」中提取學生信息

g) 放入哪一種集合後能夠保證學生按照年齡大小正序排列

h) 如何將集合中學生信息寫入記事本,每一個學生數據佔單獨一行

相關文章
相關標籤/搜索