201521123044 《Java程序設計》第8周學習總結

1. 本章學習總結


2. 書面做業

本題做業題集集合java

1.List中指定元素的刪除(題目4-1)

  • 1.1 實驗總結(見註釋)
public static List<String> convertStringToList(String line) {
        List<String> strList = new ArrayList<String>();
        Scanner sc = new Scanner(line);
        while(sc.hasNext()) {
            strList.add(sc.next());
        }
        sc.close();
        return strList;
    }//實現以空格爲分割符,將line轉換爲List<String>.
public static void remove(List<String> list, String str) {
        for(int i=list.size()-1;i>=0;i--) {//刪除元素的時候從最後一個元素開始,避免刪除元素後位置發生變化而致使有些元素沒有刪除。
            if(list.get(i).equals(str)) {//用equals的方法比較是否爲相同元素 
                list.remove(i);//引用iterator的remove的方法在list中移除掉以與str內容相同的元素
            }
        }
    }

2.統計文字中的單詞數量並按出現次數排序(題目5-3)

  • 2.1 僞代碼(簡單寫出大致步驟)
    (1)Map<String,Integer> map = new HashMap<String,Integer>();//建立鍵對象和值對象的映射
    (2)if(map.containsKey(str))//containsKey判斷是否包含指定的鍵名,如果出現過的單詞則次數加1,不然及次數爲1。
    (3)for (Map.Entry<String, Integer> e : sortmap1.entrySet())//entrySet():迭代後能夠經過e.getKey(),e.getVaclue()得到key和value
    (4)Collections.sort(entryList, new MapComparatorByValue())//Collections中的sort涉及到許多泛型,必需要實現Comparable接口,用compare To的方法來比較大小;對entryList的元素進行排序。
    (5)輸出次數排序前10的元素。
  • 2.2 實驗總結
    單詞的次數統計和出現的單詞數量,用Map類來實現,而Map是鍵對象和值對象的映射集合,鍵對象不能重複,值對象能夠重複;我以爲比較重要的地方就是map.containsKey(str)判斷Map中是否存在這個鍵,有的話次數加1,沒有就添加這個鍵到Map中。函數

    3.倒排索引(題目5-4)

  • 3.1 截圖你的提交結果(出現學號)
    學習

  • 3.2 僞代碼(簡單寫出大致步驟)
    (1)建立lineword來存放句子
    (2)String[] lineword=str.split(" ");split方法存放文本的單詞
    (3)if(word.containsKey(lineword[i]))同第2題,用containsKey的方法,判斷在Map中是否存在已有的單詞和句子的行數,若不存在,則存放新單詞和其句子的行數
    (4)for (Map.Entry<String, Integer> e : sortmap1.entrySet())//entrySet():迭代後能夠經過e.getKey(),e.getVaclue()得到key和value
    (5)用for循環,查找句子中單詞出現的行數的次數。
    (6)若是出現的行數的次數=單詞數,輸出,不然輸出found 0 results
  • 3.3 實驗總結
    仍是涉及到Map的使用,經過使用TreeMap進行排序;而用匿名內部類來實現Comparato接口進行排序,而後就是查找句子,用出現查找的單詞來肯定行數,根據該行數出現的次數來肯定輸出,行數的次數=單詞數,輸出,不然輸出found 0 results測試

    4.Stream與Lambda

    編寫一個Student類,屬性爲:
private Long id;
private String name;
private int age;
private Gender gender;//枚舉類型
private boolean joinsACM; //是否參加過ACM比賽

建立一集合對象,如List,內有若干Student對象用於後面的測試。this

  • 4.1 使用傳統方法編寫一個方法,將id>10,name爲zhang,age>20,gender爲女,參加過ACM比賽的學生篩選出來,放入新的集合。在main中調用,而後輸出結果。

樣例:3d

Student a=new Student(11L,"zhang",21,Gender.female,true);
Student b=new Student(9L,"zheng",21,Gender.female,true);
Student c=new Student(20L,"ling",15,Gender.male,false);
Student d=new Student(20L,"zhang",25,Gender.female,true);

實現的方法:code

public Student find(){
        if(this.id>10L&&this.name.equals("zhang")&&this.age>20&&this.gender==Gender.female&&this.joinsACM){
        Student e=new Student(this.id,this.name,this.age,this.gender,this.joinsACM);
        return e;
} else return null;
}

運行結果:
對象

  • 4.2 使用java8中的stream(), filter(), collect()編寫功能同4.1的函數,並測試。

代碼:blog

ArrayList<Student> List2=(ArrayList<Student>) List.parallelStream().filter(student->(student.getId()> 10L && student.getName().equals("zhang")
                    && student.getAge() > 20
                    && student.getGender().equals(Gender.female)
                    && student.isJoinsACM())).collect(Collectors.toList());
}

運行結果:
排序

  • 4.3 構建測試集合的時候,除了正常的Student對象,再往集合中添加一些null,而後從新改寫4.2,使其不出現異常。

代碼:

ArrayList<Student> List2=(ArrayList<Student>) List.parallelStream().filter(student->(student.getId()> 10L && student.getName().equals("zhang")
                    && student!=null
                    && student.getAge() > 20
                    && student.getGender().equals(Gender.female)
                    && student.isJoinsACM())).collect(Collectors.toList());
}

運行結果:

5.泛型類:GeneralStack(題目5-5)

  • 5.1 截圖你的提交結果(出現學號)
  • 5.2 GeneralStack接口的代碼
interface GeneralStack<T> {
    T push(T item);            
    T pop();                 
    T peek();                
    public boolean empty();
    public int size(); 
}
  • 5.3 結合本題,說明泛型有什麼好處
    題目5-5中的stack須要實現Interger、Double和Car三種類型,若是不用泛型,那咱們就只能每一種都去實現,c差異與數據類型不一樣但方法徹底相同的GeneralStack接口。所以使用了泛型能夠提升代碼複用率。

    6.泛型方法

    基礎參考文件GenericMain,在此文件上進行修改。

  • 6.1編寫方法max,該方法能夠返回List中全部元素的最大值。List中的元素必須實現Comparable接口。編寫的max方法需使得String max = max(strList)能夠運行成功,其中strList爲List<String>類型。也能使得Integer maxInt = max(intList);運行成功,其中intList爲List<Integer>類型。
public static <T extends Comparable<T>> T max(List<T> list) {                     
          T max = list.get(0);
          for (T t : list) {
            if ( t.compareTo( max ) > 0 ){
             max = t; 
          }
        }
          return max; // 返回最大對象
       }

樣例:

strList.add("good");
strList.add("value");
strList.add("hello");

方法:String max = max(strList);
運行結果:

  • 6.2 選作:現有User類,其子類爲StuUser,且均實現了Comparable接口。編寫方法max1,基本功能同6.1,並使得max1(stuList);能夠運行成功,其中stuList爲List<StuUser>類型。
public static <StuUserComparator extends Comparable<StuUser>> StuUser max1(List<StuUser> stuList) {                     
           StuUser max = stuList.get(0);
          for (StuUser t : stuList) {
            if ( t.compareTo( max ) > 0 ){
             max = t; 
          }
        }
          return max; 
}

樣例:

StuUser a=new StuUser(44,"25");
    stuList.add(e1);
StuUser b=new StuUser(24,"23");
    stuList.add(e2);
StuUser c=new StuUser(8,"6");
    stuList.add(e3);

運行結果:

相關文章
相關標籤/搜索