日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

201521123014 《Java程序设计》第8周学习总结

發(fā)布時間:2023/12/10 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201521123014 《Java程序设计》第8周学习总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
201521123014 《Java程序設計》第8周學習總結

1. 本周學習總結

1.1 以你喜歡的方式(思維導圖或其他)歸納總結集合與泛型相關內容。

  • 泛型(編寫的代碼可被不同類型的對象所重用)
    Java中一個集合可以放任何類型的對象,因為任何對象都 is-a Object,但從集合里面獲取對象的時候我們必須進行強制類型轉換。在沒有泛型的情況下,通過對類型Object的引用來實現(xiàn)參數的轉換,這種轉換是需要顯式地強制類型轉換,對于強制類型轉換錯誤的情況,編譯器可能不提示錯誤,而在運行時候卻又通不過,這是一個安全隱患。例如:
List list = new ArrayList(); list.add("CSDN_SEU_Cavin"); list.add(100); for (int i = 0; i < list.size(); i++) { String name = (String) list.get(i); //取出Integer時,運行時出現(xiàn)異常 System.out.println("name:" + name); } 向list類型集合中加入了一個字符串類型的值和一個Integer類型的值。(這樣合法,因為此時list默認的類型為Object類型)。在之后的循環(huán)中,由于忘記了之前在list中也加入了Integer類型的值或其他原因,運行時會出現(xiàn)java.lang.ClassCastException異常。為了解決這個問題,泛型應運而生。引入泛型的好處:從此無需使用有風險的強制類型轉換錯誤在編譯階段就能發(fā)現(xiàn),而不用等到運行時才發(fā)現(xiàn)出錯語法:在java7中可以使用菱形語法List<String> strList = new ArrayList<>();簡單泛型類的定義 public class Pair<T>定義一個泛型方法public static <T> T xxxx(T[] arr){} 改進:public static <T extends Comparable> Pair<T> xxxx(T[] a){}T extends Comparable 表示T是綁定類型(Comparable)的子類型Pair<?> 使用?就意味著不知道是什么類型使用泛型的約束與局限性:不能使用基本類型:不能使用Pair<double>, 只能Pair<Double>運行時類型查詢只適用于原始類型

2. 書面作業(yè)

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

1.1 實驗總結

public static void remove(List<String> list, String str) {for (int i = 0; i < list.size(); i++) {if (list.get(i).equals(str)) {list.remove(i);i--;}}} 實驗總結:要刪除List中指定的元素,首先應該找到這個元素,下標為元素的下標,刪除之后,元素后面的元素前移,下標就指向了被刪除元素的下一個元素,如果執(zhí)行i--的話,就會出錯。

Q2 統(tǒng)計文字中的單詞數量并按出現(xiàn)次數排序(題目5-3)

2.1 偽代碼(簡單寫出大體步驟)

偽代碼:(1)建立一個TreeMap,key類型String,value類型Integer。(2)將文字存入key中,判斷key是否為"!!!!!"如果不是判斷TreeMap中是否已經有key,如果沒有就進入TreeMap中 value設為1;如果有就進入TreeMap中value+1;(3)轉化成list,用匿名內部類實現(xiàn)Comparator接口,實現(xiàn)對value的排序。(如果value相同,TreeMap中已自動實現(xiàn)對key的排序)(4)統(tǒng)計TreeMap中的單詞數,并輸出Map中的10個元素。

2.2 實驗總結

實驗總結:對于Map的使用,必須要用有key和value。HashMap不能對Key進行排序,而TreeMap可以。注意將Map轉化為List的語法List<Map.Entry<String,Integer>> entrylist=new ArrayList<Map.Entry<String,Integer>>(str.entrySet()); 其實是要注意匿名內部類實現(xiàn)Comparator接口的語法。

Q3 倒排索引(題目5-4)

3.1 截圖你的提交結果(出現(xiàn)學號)

3.2 偽代碼(簡單寫出大體步驟)

建立一個TreeMap(key為String,value為ArrayList<Integer>),一個存放行的list。 將存入list中的單詞加入TreeMap中,按照行數加入value中。如果單詞在Map中出現(xiàn)過,則令value.add; 輸出TreeMap 讀取一行 存入一個String searchlist 類型變量中。 創(chuàng)建一個查找的ArrayList<Integer>類型Num。讀取每個單詞。 如果TreeMap中沒有searchlist里的單詞或者Num的值與get(key)進行比較不同的話; 則輸出found 0 results

3.3實驗總結

實驗總結:主要是把行和單詞要分開。要有一個儲存行的變量;才能方便查找。

Q4 Stream與Lambda編寫一個Student類,屬性為:

private Long id; private String name; private int age; private Gender gender;//枚舉類型 private boolean joinsACM; //是否參加過ACM比賽

創(chuàng)建一集合對象,如List,內有若干Student對象用于后面的測試。

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

for(i=0;i<list.size();i++){if((list.get(i).getId()>10)&&(list.get(i).getName().equals("zhang"))&&(list.get(i).getAge()>20)&&(list.get(i).getGender().equals(getGender(2)))&&(list.get(i).isJoinsACM()==true)){list2.add(list.get(i));//id>10,name為zhang, age>20, gender為女,參加過ACM比賽的學生加入list2} }

輸出結果:

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

list2=list.stream().filter(a->10<a.getId()).collect(Collectors.toList());//id>10 list2=list2.stream().filter(a->"zhang".equals(a.getName())).collect(Collectors.toList());//name為zhang list2=list2.stream().filter(a->20<a.getAge()).collect(Collectors.toList());//age>20 list2=list2.stream().filter(a->getGender(2).equals(a.getGender())).collect(Collectors.toList());//gender為女 list2=list2.stream().filter(a->a.isJoinsACM()==true).collect(Collectors.toList());//參加過ACM比賽

測試結果如圖4.1.

4.3構建測試集合的時候,除了正常的Student對象,再往集合中添加一些null,然后重新改寫4.2,使其不出現(xiàn)異常。

list.add(null);//增加null list.add(new Student(10L,"zheng",15,getGender(2),true)); list.add(new Student(20L,"ling",25,getGender(1),false)); list.add(new Student(1L,"wang",20,getGender(1),true)); list.add(new Student(25L,"zhang",25,getGender(2),true)); list.add(new Student(20L,"zhang",20,getGender(1),false)); list=list.stream().filter(a->a!=null).collect(Collectors.toList());//排除null

運行結果:

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

5.1 截圖你的提交結果(出現(xiàn)學號)

5.2 GeneralStack接口的代碼

interface GeneralStack<E> {public E push(E item);public E pop();public E peek();public boolean empty();public int size(); }

5.3 結合本題,說明泛型有什么好處

可以定義不同的類型的類。從此無需使用有風險的強制類型轉換錯誤,在編譯階段就能發(fā)現(xiàn),而不用等到運行時才發(fā)現(xiàn)出錯。

Q6 泛型方法

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

6.1 編寫方法max,該方法可以返回List中所有元素的最大值。List中的元素必須實現(xiàn)Comparable接口。編寫的max方法需使得String max = max(strList)可以運行成功,其中strList為List類型。也能使得Integer maxInt = max(intList);運行成功,其中intList為List類型。

class Max {public static <T extends Comparable> T max(List<T> strList){T maxest =strList.get(0);for(int i = 1;i < strList.size(); i++){if ((maxest.compareTo(strList.get(i)) < 0))maxest = strList.get(i);}return maxest;} }//該方法可以返回List中所有元素的最大值

3. 碼云上代碼提交記錄及PTA實驗總結

3.1 碼云代碼提交記錄

3.2 PTA實驗

  • 實驗總結已經在作業(yè)中體現(xiàn),不用寫。
posted on 2017-04-15 19:28?Paparazzi 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/huangsh/p/6714451.html

總結

以上是生活随笔為你收集整理的201521123014 《Java程序设计》第8周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。