1. 程式人生 > >7.27作業

7.27作業

implement next() 下標越界 退出 穩定 選擇題 div 簡答題 ger

容器作業

一、 填空題

  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()

二、 選擇題

1.

以下選項中關於Java集合的說法錯誤的是AC。(選擇二項)

A.

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

B.

List接口中存放的元素具有有序,不唯一的特點

C.

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()

三、 判斷題

  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。( ?

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

  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值

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

  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對象

六、 可選題

  1. 假如有以下email數據“[email protected],[email protected],[email protected],..”現需要把email中的用戶部分和郵件地址部分分離,分離後以鍵值對應的方式放入HashMap

package test;

import java.util.HashMap;
import java.util.Map;

    public class Email {
        public static void main(String[] args) {
            String str = "[email protected],[email protected],[email protected]";
            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) 如何將集合中學生信息寫入記事本,每個學生數據占單獨一行

7.27作業