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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java的第十五天

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的第十五天 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

01、可變參數

目標:學習可變參數的使用

講解:

求2個int的和,求3個int的和

? 參數的類型都是相同的,但是個數不一樣的,寫很多重載方法也很麻煩,可以使用可變參數.

什么是可變參數: 是JDK1.5的新特性

? 參數類型相同,參數個數任意

可變參數格式(重點):

? 修飾符 返回值類型 方法名(數據類型… 變量名) {

? }

可變參數的好處:

? 一個可變參數的方法,可以傳入任意多個參數,就不同寫多個重載方法

小結:

1.可變參數格式?

? 修飾符 返回值類型 方法名(數據類型… 變量名) {
? }

? 和普通方法相比,再數據類型后面添加…即可

2.可變參數的好處?

? 一個可變參數的方法,可以傳入任意多個參數,就不同寫多個重載方法

3.說出可變參數的2個注意事項

? 1.一個方法只能有一個可變參數
? 2.可變參數需要放在參數列表的最后面

public class Demo011 {public static void main(String[] args) {// add();int x = add(1, 2, 3, 4, 5, 6);System.out.println(x);}// 定義一個可變參數的方法public static int add(int... a) {// System.out.println(a); // [I@1c53fd30// 遍歷數組得到所有的參數int sum = 0;for (int i = 0; i < a.length; i++) {sum += a[i];}return sum;}/* // 求2個int的和public static int add(int a, int b) {return a + b;}// 求3個int的和public static int add(int a, int b, int c) {return a + b + c;}// 如果需要求5個,6個,任意個*/ }

02、Collections常用功能

目標:學習Collections常用功能

講解:
Collections是集合工具類,里面提供了很多操作集合的方法.
這個類沒有看到構造方法,里面的方法全是靜態方法,我們直接使用類名調用

Collections類的方法:

? static boolean addAll(Collection<?> c, T… elements) 將后面的數據添加到前面的集合中
? static void shuffle(List<?> list) 隨機交換集合中的元素
? static void sort(List list) 根據元素的自然順序升序排

課堂代碼:

public class Demo02 {public static void main(String[] args) {// test01();// test02();test03();}// static void sort?(List<T> list) 根據元素的自然順序升序排public static void test03() {ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list, 8, 5, 9, 1, 3, 2, 7);// 給集合中的元素排序Collections.sort(list);System.out.println("排序后:" + list); // 排序后:[1, 2, 3, 5, 7, 8, 9]ArrayList<String> list2 = new ArrayList<>();Collections.addAll(list2, "a", "bb", "ba", "A", "bc");Collections.sort(list2);// 按照字母的ASCII碼值來排序,如果第一個相同,再比較第二個字母System.out.println("排序后: " + list2); // 排序后: [A, a, ba, bb, bc]}// static void shuffle (List<?> list) 隨機交換集合中的元素public static void test02() {ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "aa", "bb", "cc", "dd");System.out.println(list);Collections.shuffle(list);System.out.println("交換后: " + list);}// static <T> boolean addAll (Collection<?> c, T... elements) 將后面的數據添加到前面的集合中public static void test01() {ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "aa", "bb", "cc");System.out.println(list);} }

03、Comparator比較器

目標:學習Comparator比較器的使用

講解:

Collections類中

? static void sort(List list, Comparator<? super T> c) 根據指定的排序規則來對集合中的數據進行排序
? Comparator是一個接口

小結:

1.shuffle(List<?> list)方法作用?

? 將集合中的元素隨機打亂

2.void sort(List list)方法作用?

? 按照元素的自然順序排序(數字從小到大,字母按照ASCII碼值)

3.int compare(Xxx o1, Xxx o2)方法如何升序如何降序?

? return 前面 - 后面是升序
? return 后面 - 前面是降序

課堂代碼:

public class Student {private String name;private int age;private double socre;public Student() {}public Student(String name, int age, double socre) {this.name = name;this.age = age;this.socre = socre; }public String getName() {return name; }public void setName(String name) {this.name = name; }public int getAge() {return age; }public void setAge(int age) {this.age = age; }public double getSocre() {return socre; }public void setSocre(double socre) {this.socre = socre; }@Override public String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", socre=" + socre +'}'; } }import java.util.Comparator;public class StudentComparator implements Comparator<Student> {@Overridepublic int compare(Student o1, Student o2) {// 比較學生年齡: o1 - o2升序// return o1.getAge() - o2.getAge();// 比較學生年齡: o2 - o1降序// return o2.getAge() - o1.getAge();// 按照學生成績降序return (int)(o2.getSocre() - o1.getSocre());} }public class Demo03 {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();Student s1 = new Student("赤木晴子", 16, 99);Student s2 = new Student("赤木剛憲", 19, 100);Student s3 = new Student("宮城良田", 20, 59);Collections.addAll(list, s1, s2, s3);// static <T> void sort?(List<T> list, Comparator<? super T> c) 根據指定的排序規則來對集合中的數據進行排序// Comparator是一個接口,方法參數要接口,我們傳入接口的實現類對象// StudentComparator sc = new StudentComparator();// Collections.sort(list, sc);// 方法參數要接口,我們傳入匿名內部類Collections.sort(list, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {// // 按照學生成績升序return (int)(o1.getSocre() - o2.getSocre());}});for (Student student : list) {System.out.println(student);}} }

04、冒泡排序

目標:學習冒泡排序

冒泡排序的原理:

? 相鄰元素比較,大的往后放

分析:

第一輪:

? j j+1
? arr[0] 和 arr[1]
? arr[1] 和 arr[2]
? arr[2] 和 arr[3]

第二輪:

? arr[0] 和 arr[1]
? arr[1] 和 arr[2]

第三輪:

? arr[0] 和 arr[1]

小結:

冒泡排序的原理?

? 相鄰元素比較,大的往后放

課堂代碼:

public class Demo04 {public static void main(String[] args) {int[] arr = {5, 2, 3, 1};// 外循環控制比較輪數for (int i = 0; i < arr.length - 1; i++) { // i = 0,1,2System.out.println("輪數");// 內循環控制每輪的比較次數, j小于幾就比較幾次for (int j = 0; j < arr.length - 1 - i; j++) {// System.out.println("\t" + j + "和" + (j+1) + "比較");// 相鄰元素比較,大的往后放if (arr[j] > arr[j+1]) {// 前面大,后面小,交換位置int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}System.out.println("排序后:" + Arrays.toString(arr));}

05、Map接口介紹

目標:學習Map集合特點

講解:
將鍵映射到值的對象。 Map不能包含重復的鍵; 每個鍵可以映射到最多一個值。

Map集合特點:

? 1.保存鍵和值
? 2.鍵不能重復
? 3.一個鍵對應一個值

有對應關系的就考慮使用Map來存儲

06、Map常用方法

目標:學習Map常用方法

講解:
Map是一個集合,常用的方法就是增刪改查

Map常用方法:

? V put(K key, V value) 當鍵不重復是添加鍵值對,返回null,當鍵存在是修改,返回被修改的數據
? V get(Object key) 通過鍵獲取值
? V remove(Object key) 通過鍵刪除這個鍵值對
? int size() 獲取map的鍵值對的個數

Map的實現類HashMap:

? HashMap底層是哈希表

小結:

1.Map常用方法有哪些?

? put: 添加/修改
? get: 通過鍵獲取值
? remove: 通過鍵刪除這個鍵值對
? size: 獲取個數

課堂代碼:

public class Demo06 {public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();// V put (K key, V value) 當鍵不重復是添加鍵值對,返回null,當鍵存在是修改,返回被修改的數據map.put("鄧超", "孫儷");map.put("黃曉明", "楊穎");System.out.println(map.put("謝霆鋒", "張柏芝")); // nullmap.put("老干爹", "老干媽");System.out.println(map.put("謝霆鋒", "王菲")); // 張柏芝System.out.println(map);// V get (Object key) 通過鍵獲取值System.out.println(map.get("老干爹")); // 老干媽// V remove (Object key) 通過鍵刪除這個鍵值對map.remove("老干爹");System.out.println("刪除后: " + map);// int size () 獲取map的鍵值對的個數System.out.println(map.size());} }

07、Map遍歷1_鍵找值方式

目標:學習Map遍歷鍵找值方式

講解:

什么是Map遍歷?

? Map遍歷就是依次取出每個鍵和值(一次獲取一對)

? Set keySet(): 返回map中所有的鍵,存放到Set集合中

小結:

Map遍歷鍵找值方式步驟

? 1.獲取所有的鍵
? 2.遍歷獲取每個鍵
? 3.通過鍵找值

3步走

課堂代碼:

public class Demo07 {public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();map.put("鄧超", "孫儷");map.put("黃曉明", "楊穎");map.put("謝霆鋒", "張柏芝");map.put("老干爹", "老干媽");/*String k1 = "鄧超";String v1 = map.get(k1);System.out.println(k1 + "::" + v1);String k2 = "黃曉明";String v2 = map.get(k2);System.out.println(k2 + "::" + v2);String k3 = "謝霆鋒";String v3 = map.get(k3);System.out.println(k3 + "::" + v3);String k4 = "老干爹";String v4 = map.get(k4);System.out.println(k4 + "::" + v4);*/// 以上代碼是重復代碼,唯獨鍵再變化,所以我們改成循環// 1.獲取所有的鍵Set<String> keySet = map.keySet();// 2.遍歷獲取每個鍵for (String key : keySet) {// 3.通過鍵找值String value = map.get(key); // 核心,通過鍵找到值System.out.println(key + ":::" + value);}} }

08、Map遍歷2_Entry鍵值對關系

目標:學習Map遍歷Entry方式

講解:

什么是Entry:

? 是一個接口,表示鍵值對對象,里面會保存鍵和值,Entry相當于結婚證

如何獲取Entry:

? 沒有獲取一個Entry的方法,只能獲取所有Entry
? Set<Entry<K,V>> entrySet(): 獲取所有的Entry

小結:

Map遍歷Entry方式的步驟

? 1.得到所有的Entry
? 2.遍歷得到每個Entry
? 3.通過Entry得到鍵和值

3步走

? Entry方式效率高一點,因為Map底層就是用Entry存儲數據的

課堂代碼:

import java.util.HashMap; import java.util.Map; import java.util.Set; public class Demo08 {public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();map.put("鄧超", "孫儷");map.put("黃曉明", "楊穎");map.put("謝霆鋒", "張柏芝");map.put("老干爹", "老干媽");// 1.得到所有的EntrySet<Map.Entry<String, String>> entrySet = map.entrySet();// 2.遍歷得到每個Entryfor (Map.Entry<String, String> entry : entrySet) {// 3.通過Entry得到鍵和值System.out.println(entry.getKey() + "==" + entry.getValue());}} }

09、HashMap存儲自定義類型

目標:學習HashMap存儲自定義類型

練習:

? 每位學生(姓名,年齡)都有自己的家庭住址。那么,既然有對應關系,則將學生對象和家庭住址存儲到map集合中。學生作為鍵, 家庭住址作為值。

注意:

? 學生姓名相同并且年齡相同視為同一名學生。

分析:

? 1.定義學生類
? 2.創建一個Map用于存放學生
? 3.創建4個學生存儲到Map中
? 4.遍歷map

小結:

HashMap存儲自定義類型鍵需要怎么做?

? 因為鍵不能夠重復,需要重寫鍵的hashCode和equals方法

課堂代碼:

// 1.定義學生類 public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;if (age != student.age) return false;return name != null ? name.equals(student.name) : student.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';} }import java.util.HashMap; import java.util.Map; import java.util.Set; public class Demo09 {public static void main(String[] args) {// 1.定義學生類// 2.創建一個Map用于存放學生HashMap<Student, String> map = new HashMap<>();// 3.創建4個學生存儲到Map中Student s1 = new Student("流川楓", 18);Student s2 = new Student("櫻木花道", 17);Student s3 = new Student("赤木晴子", 16);Student s4 = new Student("三井壽", 19);Student s5 = new Student("三井壽", 19);map.put(s1, "北海道");map.put(s2, "東京");map.put(s3, "大版");map.put(s4, "名古屋");map.put(s5, "廣島");// 4.遍歷map// 1.鍵找值方式Set<Student> keySet = map.keySet();for (Student key : keySet) {String value = map.get(key);System.out.println(key + " == " + value);}System.out.println("-------------");// 2.Entry方式Set<Map.Entry<Student, String>> entrySet = map.entrySet();for (Map.Entry<Student, String> entry : entrySet) {System.out.println(entry.getKey() + "::" + entry.getValue());}} }

10、Map集合練習

目標:通過練習加強對Map使用

需求:

? 計算一個字符串中每個字符出現次數。
? “bzcbzaabAaacb”
? ↑
? a=4
? A=1
? b=4
? c=2
? z=2

? map = {b=3, z=1, c=1};

分析:

? 一個字母會對應一個次數,有對應關系就使用Map集合來存儲,字母作為鍵,次數作為值

實現步驟:

? 1.定義一個字符串
? 2.創建一個Map,字母作為鍵,次數作為值
? 3.遍歷字符串,得到每個字母
? 4.如果map中沒有這個字母,次數設置為1次
? 5.如果map中有這個字母,次數+1
? 6.遍歷map集合

小結:

? 當有對應關系的時候就使用map

? boolean containsKey(String key) 判斷map中是否包含指定的鍵,如果包含返回true

課堂代碼:

import java.util.HashMap; import java.util.Map; import java.util.Set; public class Demo10 {public static void main(String[] args) {// 1.定義一個字符串String str = "bzcbzaabAaacb";// 2.創建一個Map,字母作為鍵,次數作為值HashMap<Character, Integer> map = new HashMap<>();// 3.遍歷字符串,得到每個字母for (int i = 0; i < str.length(); i++) {// 通過索引得到字符char c = str.charAt(i);// Map方法: boolean containsKey?(Object key) 判斷map是否有這個鍵if (map.containsKey(c)) {// 5.如果map中有這個字母,次數+1// 得到之前的次數int cout = map.get(c);// 次數+1map.put(c, cout + 1);} else {// 4.如果map中沒有這個字母,次數設置為1次map.put(c, 1);}}// 6.遍歷map集合// Entry方式Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();for (Map.Entry<Character, Integer> entry : entrySet) {System.out.println(entry.getKey() + ": " + entry.getValue());}} }import java.util.HashMap; import java.util.Map; import java.util.Set;/* 腸胃消化 -> https://list.jd.com/list.html?cat=9192,12632,12641情趣內衣 -> https://list.jd.com/list.html?cat=9192,9196,1506人參 -> https://list.jd.com/list.html?cat=9192,9195,9230小結:有對應關系的,就考慮使用map來保存*/ public class Demo11 {public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();map.put("腸胃消化", "https://list.jd.com/list.html?cat=9192,12632,12641");map.put("情趣內衣", "https://list.jd.com/list.html?cat=9192,9196,1506");map.put("人參", "https://list.jd.com/list.html?cat=9192,9195,9230");// 遍歷// Entry方式Set<Map.Entry<String, String>> entrySet = map.entrySet();for (Map.Entry<String, String> entry : entrySet) {System.out.println(entry.getKey() + "::" + entry.getValue());}} }

11、圖書管理系統_演示

圖書管理系統功能的步驟:

1.歡迎和功能選擇界面

? 1.輸出歡迎語句
? 2.輸出功能選項
? 3.讓用戶輸入一個選項
? 4.對用戶的輸入進行匹配

2.初始化書籍

? 1.定義書籍類Book
? 2.定義一個ArrayList保存2本名著
? 3.定義一個ArrayList保存2本it書籍
? 4.定義個Map,鍵是書籍類型,值是對應的書籍
? 5.將書籍類型和對應的書籍存儲到Map中

3.查看書籍

? 1.遍歷Map集合,拿到鍵和值
? 2.再遍歷ArrayList拿到所有書籍

4.添加書籍

? 1.讓用戶輸入要添加的書籍的類型,書名,價格
? 2.根據書名和價格創建一個Book
? 3.根據用戶輸入的書籍類型找到對應的集合
? 4.將新的書添加到這個集合即可

5.刪除書籍

? 1.讓用戶輸入要刪除的書籍的類型數書名
? 2.在map中根據書籍類型找到對應的書的集合
? 3.遍歷ArrayList找到這本書
? 4.刪除這本書

6.修改書籍

? 1.讓用戶輸入修改的數據的類型,老的書名,新的書名,新的價格
? 2.根據輸入的類型去Map中找到這個類型的集合
? 3.遍歷集合,判斷是否是要修改的書籍
? 4.如果是,就設置新的書名和價格

7.退出

課堂代碼:

// 1.定義書籍類Book public class Book {private String name;private double price;public Book() {}public Book(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", price=" + price +'}';} } import java.util.*; import java.util.Map.Entry; /* 圖書管理系統功能1.歡迎和功能選擇界面1.輸出歡迎語句2.輸出功能選項3.讓用戶輸入一個選項4.對用戶的輸入進行匹配2.初始化書籍1.定義書籍類Book2.定義一個ArrayList保存2本名著3.定義一個ArrayList保存2本it書籍4.定義個Map,鍵是書籍類型,值是對應的書籍5.將書籍類型和對應的書籍存儲到Map中3.查看書籍1.遍歷Map集合,拿到鍵和值2.再遍歷ArrayList拿到所有書籍4.添加書籍1.讓用戶輸入要添加的書籍的類型,書名,價格2.根據書名和價格創建一個Book3.根據用戶輸入的書籍類型找到對應的集合4.將新的書添加到這個集合即可5.刪除書籍1.讓用戶輸入要刪除的書籍的類型數書名2.在map中根據書籍類型找到對應的書的集合3.遍歷ArrayList找到這本書4.刪除這本書6.修改書籍1.讓用戶輸入修改的數據的類型,老的書名,新的書名,新的價格2.根據輸入的類型去Map中找到這個類型的集合3.遍歷集合,判斷是否是要修改的書籍4.如果是,就設置新的書名和價格7.退出*/ public class BookManager {public static void main(String[] args) {// 初始化書籍// 2.定義一個ArrayList保存2本名著ArrayList<Book> mz = new ArrayList<>();mz.add(new Book("西游記", 19));mz.add(new Book("水滸傳", 29));// 3.定義一個ArrayList保存2本it書籍ArrayList<Book> it = new ArrayList<>();it.add(new Book("Java入門到精通", 99));it.add(new Book("PHP入門到精通", 9.9));// 4.定義個Map,鍵是書籍類型,值是對應的書籍Map<String, ArrayList<Book>> allBooks = new HashMap<>();// 5.將書籍類型和對應的書籍存儲到Map中allBooks.put("名著", mz);allBooks.put("it書籍", it);a:while (true) {/*1.歡迎和功能選擇界面*/// 1.輸出歡迎語句System.out.println("--------歡迎來到圖書管理系統--------");// 2.輸出功能選項System.out.println("1.查看書籍");System.out.println("2.添加書籍");System.out.println("3.刪除書籍");System.out.println("4.修改書籍");System.out.println("5.退出");System.out.println("請輸入你的選擇:");// 3.讓用戶輸入一個選項Scanner sc = new Scanner(System.in);int operation = sc.nextInt();// 4.對用戶的輸入進行匹配switch (operation) {case 1:showAllBooks(allBooks);break;case 2:addBook(allBooks);break;case 3:removeBook(allBooks);break;case 4:editBook(allBooks);break;case 5:System.out.println("大爺,走好,歡迎下次再來.");break a;default:System.out.println("大爺,沒有這樣的操作...");break;}}}/*修改書籍*/private static void editBook(Map<String, ArrayList<Book>> allBooks) {// 1.讓用戶輸入修改的數據的類型,老的書名,新的書名,新的價格Scanner sc = new Scanner(System.in);System.out.println("請輸入要修改書籍的類型:");String type = sc.next();System.out.println("請輸入要修改書籍的書名:");String oldName = sc.next();System.out.println("請輸入新的書名:");String newName = sc.next();System.out.println("請輸入新的價格:");double price = sc.nextDouble();// 2.根據輸入的類型去Map中找到這個類型的集合ArrayList<Book> books = allBooks.get(type);if (books == null) {System.out.println("沒有這個類型的書籍");return;}// 3.遍歷集合,判斷是否是要修改的書籍for (Book book : books) {if (book.getName().equals(oldName)) {// 4.如果是要修改的書籍,就設置新的書名和價格book.setName(newName);book.setPrice(price);System.out.println(oldName + "修改成功");return;}}System.out.println("沒有找到" + oldName + "這本書");}/*刪除書籍*/private static void removeBook(Map<String, ArrayList<Book>> allBooks) {// 1.讓用戶輸入要刪除的書籍的類型數書名Scanner sc = new Scanner(System.in);System.out.println("請輸入要刪除書籍的類型:");String type = sc.next();System.out.println("請輸入要刪除的書名:");String name = sc.next();// 2.在map中根據書籍類型找到對應的書的集合ArrayList<Book> books = allBooks.get(type);if (books == null) {// 沒有這種類型的書籍,不用刪除,不需要往下走,結束這個方法System.out.println("沒有這種類型的書籍");return;}for (int i = 0; i < books.size(); i++) {// 3.遍歷ArrayList找到這本書Book book = books.get(i);if (book.getName().equals(name)) {// 4.刪除這本書books.remove(i);System.out.println("刪除" + name + "書籍成功");return;}}System.out.println(name + "這本書不存在");}/*4.添加書籍*/private static void addBook(Map<String, ArrayList<Book>> allBooks) {// 1.讓用戶輸入要添加的書籍的類型,書名,價格Scanner sc = new Scanner(System.in);System.out.println("請輸入要添加書籍的類型:");String type = sc.next();System.out.println("請輸入要添加的書名:");String name = sc.next();System.out.println("請輸入要添加書的價格:");double price = sc.nextDouble();// 2.根據書名和價格創建一個BookBook newBook = new Book(name, price);// 3.根據用戶輸入的書籍類型找到對應的集合ArrayList<Book> books = allBooks.get(type);if (books == null) {// 目前沒有這種類型books = new ArrayList<>();allBooks.put(type, books);}// 做標記(默認書是不存在的)boolean exists = false;// 判斷書是否存在(要比較完所有的書才能確定是否存在)for (Book book : books) {if (book.getName().equals(name)) {// 書存在exists = true; // 當書存在,將標記改成true}}// for循環完成根據標記來確定書是否存在if (exists) {// 如果這本書存在,不添加System.out.println(name + "這本書存在");} else {// 如果這本書不存在// 4.將新的書添加到這個集合即可books.add(newBook);System.out.println("添加" + name + "成功");}}// 查看所有書籍,需要書籍的mapprivate static void showAllBooks(Map<String, ArrayList<Book>> books) {System.out.println("類型\t\t書名\t價格");// 1.遍歷Map集合,拿到鍵和值Set<Entry<String, ArrayList<Book>>> entrySet = books.entrySet();for (Entry<String, ArrayList<Book>> entry : entrySet) {String key = entry.getKey();System.out.println(key);ArrayList<Book> list = entry.getValue();// 遍歷ArrayList// 2.再遍歷ArrayList拿到所有書籍for (Book book : list) {System.out.println("\t\t\t" + book.getName() + "\t" + book.getPrice());}}} }import java.util.*; import java.util.Map.Entry; public class BookManager {public static void main(String[] args) {// 初始化書籍// 2.定義一個ArrayList保存2本名著ArrayList<Book> mz = new ArrayList<>();mz.add(new Book("西游記", 19));mz.add(new Book("水滸傳", 29));// 3.定義一個ArrayList保存2本it書籍ArrayList<Book> it = new ArrayList<>();it.add(new Book("Java入門到精通", 99));it.add(new Book("PHP入門到精通", 9.9));// 4.定義個Map,鍵是書籍類型,值是對應的書籍Map<String, ArrayList<Book>> allBooks = new HashMap<>();// 5.將書籍類型和對應的書籍存儲到Map中allBooks.put("名著", mz);allBooks.put("it書籍", it);a:while (true) {/*1.歡迎和功能選擇界面*/// 1.輸出歡迎語句System.out.println("--------歡迎來到圖書管理系統--------");// 2.輸出功能選項System.out.println("1.查看書籍");System.out.println("2.添加書籍");System.out.println("3.刪除書籍");System.out.println("4.修改書籍");System.out.println("5.退出");System.out.println("請輸入你的選擇:");// 3.讓用戶輸入一個選項Scanner sc = new Scanner(System.in);int operation = sc.nextInt();// 4.對用戶的輸入進行匹配switch (operation) {case 1:showAllBooks(allBooks);break;case 2:addBook(allBooks);break;case 3:removeBook(allBooks);break;case 4:editBook(allBooks);break;case 5:System.out.println("大爺,走好,歡迎下次再來.");break a;default:System.out.println("大爺,沒有這樣的操作...");break;}}}/*修改書籍*/private static void editBook(Map<String, ArrayList<Book>> allBooks) {// 1.讓用戶輸入修改的數據的類型,老的書名,新的書名,新的價格Scanner sc = new Scanner(System.in);System.out.println("請輸入要修改書籍的類型:");String type = sc.next();System.out.println("請輸入要修改書籍的書名:");String oldName = sc.next();System.out.println("請輸入新的書名:");String newName = sc.next();System.out.println("請輸入新的價格:");double price = sc.nextDouble();// 2.根據輸入的類型去Map中找到這個類型的集合ArrayList<Book> books = allBooks.get(type);if (books == null) {System.out.println("沒有這個類型的書籍");return;}// 3.遍歷集合,判斷是否是要修改的書籍for (Book book : books) {if (book.getName().equals(oldName)) {// 4.如果是要修改的書籍,就設置新的書名和價格book.setName(newName);book.setPrice(price);System.out.println(oldName + "修改成功");return;}}System.out.println("沒有找到" + oldName + "這本書");}/*刪除書籍*/private static void removeBook(Map<String, ArrayList<Book>> allBooks) {// 1.讓用戶輸入要刪除的書籍的類型數書名Scanner sc = new Scanner(System.in);System.out.println("請輸入要刪除書籍的類型:");String type = sc.next();System.out.println("請輸入要刪除的書名:");String name = sc.next();// 2.在map中根據書籍類型找到對應的書的集合ArrayList<Book> books = allBooks.get(type);if (books == null) {// 沒有這種類型的書籍,不用刪除,不需要往下走,結束這個方法System.out.println("沒有這種類型的書籍");return;}for (int i = 0; i < books.size(); i++) {// 3.遍歷ArrayList找到這本書Book book = books.get(i);if (book.getName().equals(name)) {// 4.刪除這本書books.remove(i);System.out.println("刪除" + name + "書籍成功");return;}}System.out.println(name + "這本書不存在");}/*4.添加書籍*/private static void addBook(Map<String, ArrayList<Book>> allBooks) {// 1.讓用戶輸入要添加的書籍的類型,書名,價格Scanner sc = new Scanner(System.in);System.out.println("請輸入要添加書籍的類型:");String type = sc.next();System.out.println("請輸入要添加的書名:");String name = sc.next();System.out.println("請輸入要添加書的價格:");double price = sc.nextDouble();// 2.根據書名和價格創建一個BookBook newBook = new Book(name, price);// 3.根據用戶輸入的書籍類型找到對應的集合ArrayList<Book> books = allBooks.get(type);if (books == null) {// 目前沒有這種類型books = new ArrayList<>();allBooks.put(type, books);}// 做標記(默認書是不存在的)boolean exists = false;// 判斷書是否存在(要比較完所有的書才能確定是否存在)for (Book book : books) {if (book.getName().equals(name)) {// 書存在exists = true; // 當書存在,將標記改成true}}// for循環完成根據標記來確定書是否存在if (exists) {// 如果這本書存在,不添加System.out.println(name + "這本書存在");} else {// 如果這本書不存在// 4.將新的書添加到這個集合即可books.add(newBook);System.out.println("添加" + name + "成功");}}// 查看所有書籍,需要書籍的mapprivate static void showAllBooks(Map<String, ArrayList<Book>> books) {System.out.println("類型\t\t書名\t價格");// 1.遍歷Map集合,拿到鍵和值Set<Entry<String, ArrayList<Book>>> entrySet = books.entrySet();for (Entry<String, ArrayList<Book>> entry : entrySet) {String key = entry.getKey();System.out.println(key);ArrayList<Book> list = entry.getValue();// 遍歷ArrayList// 2.再遍歷ArrayList拿到所有書籍for (Book book : list) {System.out.println("\t\t\t" + book.getName() + "\t" + book.getPrice());}}} }

12、圖書管理系統

功能分析:

? 1.功能選擇界面
? 2.初始化書籍
? 3.查看書籍
? 4.添加書籍
? 5.刪除書籍
? 6.修改書籍

目標:實現 1.功能選擇界面

? 打印輸出相應字符串即可
? 使用鍵盤輸入
? 根據用戶的輸入進行選擇

目標:實現 2.初始化書籍

? 1.定義Book書籍類
? 2.創建一個名著集合,存儲兩本名著
? 3.創建一個it書籍集合,存儲兩本it書籍
? 4.創建一個Map,鍵是書籍類型,值就是對應的書籍集合
? 5.添加對應的數據到Map集合中

目標:實現 3.查看書籍

? 遍歷map集合

目標:實現 4.添加書籍

? 輸入要添加書籍的類型
? 輸入要添加的書名
? 輸入要添加書的價格
? 創建Book對象
? 添加到對應的ArrayList集合中

目標: 實現 5.刪除書籍

? 輸入要刪除書籍的類型
? 輸入要刪除的書名
? 通過類型找到書籍的集合
? 從集合中刪除這本數

目標: 實現 6.修改書籍

? 輸入要修改書籍的類型
? 輸入要修改書籍的書名
? 輸入新的書名
? 輸入新的價格
? 通過類型找到書籍的集合
? 遍歷書籍集合找到要修改的書籍
? 修改書籍

課堂代碼:

// 1.定義Book書籍類 public class Book {private String name;private double price;public Book() {}public Book(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", price=" + price +'}';} }import java.util.*; public class Demo12 {public static void main(String[] args) {// 2.初始化書籍// 1.定義Book書籍類// 2.創建一個名著集合,存儲兩本名著ArrayList<Book> mz = new ArrayList<>();mz.add(new Book("西游記", 19));mz.add(new Book("水滸傳", 29));// 3.創建一個it書籍集合,存儲兩本it書籍ArrayList<Book> it = new ArrayList<>();it.add(new Book("Java入門到精通", 99));it.add(new Book("PHP入門到精通", 9.9));// 4.創建一個Map,鍵是書籍類型,值就是對應的書籍集合HashMap<String, ArrayList<Book>> map = new HashMap<>();// 5.添加對應的數據到Map集合中map.put("名著", mz);map.put("it書籍", it);// 讓功能選擇界面可以循環多次選擇while (true) {// 1.功能選擇界面, 打印輸出相應字符串即可System.out.println("--------歡迎來到圖書管理系統--------");System.out.println("1.查看書籍");System.out.println("2.添加書籍");System.out.println("3.刪除書籍");System.out.println("4.修改書籍");System.out.println("5.退出");// 使用鍵盤輸入Scanner sc = new Scanner(System.in);System.out.println("請輸入你的選擇:");int operator = sc.nextInt();// 根據用戶的輸入進行選擇switch (operator) {case 1:showAllBooks(map);break;case 2:addBook(map);break;case 3:deleteBook(map);break;case 4:updateBook(map);break;case 5:System.out.println("大爺,請慢走,歡迎下次再來!");System.exit(0);break;default:System.out.println("大爺,你的操作不存在.請不要亂來");break;}}}private static void updateBook(HashMap<String, ArrayList<Book>> map) {// 目標: 實現 6.修改書籍Scanner sc = new Scanner(System.in);// 輸入要修改書籍的類型System.out.println("請輸入要修改書籍的類型");String type = sc.next();// 輸入要修改書籍的書名System.out.println("請輸入要修改書籍的書名");String oldName = sc.next();// 輸入新的書名System.out.println("請輸入新的書名");String newName = sc.next();// 輸入新的價格System.out.println("請輸入新的價格");double newPrice = sc.nextDouble();// 通過類型找到書籍的集合ArrayList<Book> list = map.get(type);if (list == null) {System.out.println("要修改的書籍類型不存在");return;}// 遍歷書籍集合找到要修改的書籍for (int i = 0; i < list.size(); i++) {Book book = list.get(i);if (book.getName().equals(oldName)) {// 找到了要修改的書籍// 修改書籍book.setName(newName);book.setPrice(newPrice);System.out.println("修改" + oldName + "成功");return;}}System.out.println("沒有找要修改的書籍" + oldName);}private static void deleteBook(HashMap<String, ArrayList<Book>> map) {// 目標: 實現 5.刪除書籍Scanner sc = new Scanner(System.in);// 輸入要刪除書籍的類型System.out.println("請輸入要刪除書籍的類型");String type = sc.next();// 輸入要刪除的書名System.out.println("請輸入要刪除的書名");String name = sc.next();// 通過類型找到書籍的集合ArrayList<Book> list = map.get(type);if (list == null) {System.out.println("沒有這個類型的書籍");return;}// 從集合中刪除這本數for (int i = 0; i < list.size(); i++) {Book book = list.get(i);if (book.getName().equals(name)) {// 找到要刪除的書籍,并刪除list.remove(i);System.out.println("刪除" + name + "成功");return ; // 結束這個方法}}System.out.println("沒有這本書籍" + name);}private static void addBook(HashMap<String, ArrayList<Book>> map) {// 目標:實現 4.添加書籍Scanner sc = new Scanner(System.in);// 輸入要添加書籍的類型System.out.println("請輸入要添加書籍的類型");String type = sc.next();// 輸入要添加的書名System.out.println("請輸入要添加的書名");String name = sc.next();// 輸入要添加書的價格System.out.println("請輸入要添加書的價格");double price = sc.nextDouble();// 創建Book對象Book book = new Book(name, price);// 通過書籍類型,找到書籍集合ArrayList<Book> list = map.get(type);// 如果list為null說明,沒有這種類型的書籍if (list == null) {list = new ArrayList<>();map.put(type, list);}// 判斷書籍是否存在// 做一個標記,表示這本書是否存在,false表示不存在boolean exists = false;for (Book b : list) {if (b.getName().equals(name)) {// 書名相同;exists = true;break; // 一旦書名相同,就是重復的書籍,不需要往后面判斷啦}}if (exists) {// 如果存在,就不添加System.out.println(name + "書籍已經存在");} else {// 如果不存在,就添加// 添加到對應的ArrayList集合中list.add(book);System.out.println("添加" + name + "書籍成功");}}private static void showAllBooks(HashMap<String, ArrayList<Book>> map) {System.out.println("類型\t\t書名\t價格");// 遍歷Map,使用Entry方式// 1.得到所有的EntrySet<Map.Entry<String, ArrayList<Book>>> entrySet = map.entrySet();// 2.遍歷得到每個Entryfor (Map.Entry<String, ArrayList<Book>> entry : entrySet) {// 打印鍵System.out.println(entry.getKey());// 得到值(ArrayList集合)ArrayList<Book> value = entry.getValue();// 遍歷ArrayListfor (Book book : value) {System.out.println("\t\t\t" +book.getName() + "\t" + book.getPrice());}}} }

13、總結

能夠使用集合工具類

? Collections類:
? addAll(List list, T… a) 將后后面的數據添加到前面的集合
? shuffle(List list) 對集合中的元素隨機交換位置
? sort(List list) 將集合中的元素按照自然順序排序

能夠使用Comparator比較器進行排序

? Collections.sort(list, new Comparator() {
? @Override
? public int compare(Student o1, Student o2) {
? // // 按照學生成績升序
? return (int)(o1.getSocre() - o2.getSocre());
? }
? });

能夠使用可變參數

? 修飾符 返回值類型 方法名(數據類型… 變量名) {
? }

? 調用方法時可以傳入任意多個參數

能夠理解冒泡排序的原理

? 相鄰元素比較,大的往后放

能夠說出Map集合特點

? 1.保存鍵和值
? 2.鍵不能重復
? 3.一個鍵對應一個值

使用Map集合添加方法保存數據

? put(鍵, 值);

使用”鍵找值”的方式遍歷Map集合

? HashMap<String, String> map = new HashMap<>();
? map.put(“鄧超”, “孫儷”);
? map.put(“黃曉明”, “楊穎”);
? map.put(“謝霆鋒”, “張柏芝”);
? map.put(“老干爹”, “老干媽”);

1.獲取所有的鍵

? Set keySet = map.keySet();

2.遍歷獲取每個鍵

? for (String key : keySet) {

3.通過鍵獲取值

? String value = map.get(key);
? }

使用”鍵值對”的方式遍歷Map集合

? HashMap<String, String> map = new HashMap<>();
? map.put(“鄧超”, “孫儷”);
? map.put(“黃曉明”, “楊穎”);
? map.put(“謝霆鋒”, “張柏芝”);
? map.put(“老干爹”, “老干媽”);

? // 1.得到所有的Entry
? Set<Map.Entry<String, String>> entrySet = map.entrySet();
? // 2.遍歷得到每個Entry
? for (Map.Entry<String, String> entry : entrySet) {
? // 3.通過Entry得到鍵和值
? System.out.println(entry.getKey() + “==” + entry.getValue());
? }

能夠使用HashMap存儲自定義鍵值對的數據

? 自定類型作為鍵,重寫hashCode和equals保證鍵唯一

能夠理解圖書管理系統案例

? 1.功能選擇界面
? 2.初始化書籍
? 3.查詢書籍
? 4.添加書籍
? 5.刪除書籍
? 6.修改書籍

課堂代碼:

public class Demo13 {public static void main(String[] args) {// 有3個1-1000的數字a,b,c,求出a + b + c = 1000并且 a的平方+b的平方=c的平方; 討論再后天給答案// 200 375 425// 375 200 425// 排列組合long start = System.currentTimeMillis();test03();long end = System.currentTimeMillis();System.out.println("消耗時間: " + (end - start));}public static void test03() {// 1000 * 1000for (int a = 1; a <= 1000; a++) {// a = 700 b最大就是300for (int b = 1; b <= 1000 - a; b++) {int c = 1000 - a - b;if (a*a + b*b == c*c) {System.out.println("a = " + a + ", b = " + b + ",c = " + c);}}}}public static void test02() {// 1000 * 1000for (int a = 1; a <= 1000; a++) {for (int b = 1; b <= 1000; b++) {int c = 1000 - a - b;if (a*a + b*b == c*c) {System.out.println("a = " + a + ", b = " + b + ",c = " + c);}}}}public static void test01() {// 1000 * 1000 * 1000 = 1 000 000 000for (int a = 1; a <= 1000; a++) {for (int b = 1; b <= 1000; b++) {for (int c = 1; c <= 1000; c++) {if (a + b + c == 1000 && a*a + b*b == c*c) {System.out.println("a = " + a + ", b = " + b + ",c = " + c);}}}}} }public class Demo131 {public static void main(String[] args) {Integer i1 = 127; // 自動裝箱Integer.valueOf(127);Integer i2 = 127;Integer i3 = 128;Integer i4 = 128;// 有一個緩存區,會存儲到-128到127的Integer對象,如果再-128到127范圍內,直接去數組中取出來// 如果是-128到127以外的會創建新的Integer.// -128到127這些數字使用比較頻繁.就先創建,并存儲取來,要時候直接拿去用.System.out.println(i1 == i2); // trueSystem.out.println(i3 == i4); // false} }

總結

以上是生活随笔為你收集整理的java的第十五天的全部內容,希望文章能夠幫你解決所遇到的問題。

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