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

歡迎訪問 生活随笔!

生活随笔

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

java

Java 学习(21)--集合笔试题

發布時間:2025/5/22 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 学习(21)--集合笔试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

集合筆試題

1.產生10個1-20之間的隨機數,要求隨機數不能重復(List 和 Set 分別實現)

分析:1.創建一個 ArrayList 對象

? ? ? ? ? ?2.如果 ArrayList 對象長度小于 10

? ? ? ? ? ?3.在循環中,創建一個 Random 對象,產生 1-20 之間的隨機數

? ? ? ? ? ?4. 通過 ArrayList 對象 d constains 方法判斷,該隨機數是否存在于集合中,不存在則加入,存在則放棄。

代碼:

1.List

package com.neuedu.collection;import java.util.ArrayList; import java.util.Random;public class Demo1 {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();while(list.size() < 10){Random random = new Random();int nextInt = random.nextInt(20) + 1;if(!list.contains(nextInt)) {list.add(nextInt);}}System.out.println(list);}}

輸出:

2.Set (無序【添加順序和打印順序不一致】、不重復)

package com.neuedu.collection;import java.util.HashSet; import java.util.Set;public class Demo2 {public static void main(String[] args) {Set set = new HashSet<Integer>();while(set.size() < 10) {int random = (int)(Math.random() * 20) + 1;set.add(random);}System.out.println(set);}}

輸出:

拓展:當兩個內容相同則輸出一個,不同則都輸出

hashcode: 根據一個對象,通過一定的算法,計算出一個 32位 的 2進制 表示的數據(不定長數據? 轉換? 定長數據)

Object?hashcode(默認的hashcode):根據對象在內存的地址來計算?hashcode 值(基本都不相同)

name 是string 類型?,string 類型重寫 hashcode ,當字符串內容相同則 hashcode 值相同(屬性相關)

set 結構:

豎:hashtable(hash 桶)里面的小格(hashcode),當hashcode 值相同時才會放到同一個小格里面;

橫:LinkedList(鏈表),里面的小格(equal 后的值),若二者相同則表示在鏈表的同一格里面,重復的不在添加到小格中;如二者不同則不在同一格里面,將不同的放在后面的小格里面。

package com.neuedu.collection;import java.util.HashSet; import java.util.Set;public class SetDemo {public static void main(String[] args) {Set<Person> set = new HashSet<Person>();Person p1 = new Person("林青霞", 50);Person p2 = new Person("林青霞", 40);set.add(p1);set.add(p2);System.out.println(set);}} class Person {private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}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 "Person [name=" + name + ", age=" + age + "]";}@Overridepublic int hashCode() {return name.hashCode() + age;} @Overridepublic boolean equals(Object obj) {if(!(obj instanceof Person)){return false;}Person person = (Person)obj;if(this.name.equals(person.name) && this.age == person.age) {return true;}return false;}}

輸出:

2.鍵盤錄入5個學生信息(姓名、語文成績、數學成績、英語成績)按照總分從高到低的順序(若總分相同,則按照語文、數學、英語的成績進行倒序)

二叉樹:24 18 30 16 20 28 35

中序遍歷(詳解) :左 中 右? ? ?16 18 20 24? 28 30 35?

package com.neuedu.collection;import java.util.Scanner; import java.util.Set; import java.util.TreeSet;public class Demo3 {public static void main(String[] args) {TreeSet<Student> treeSet = new TreeSet<>();Scanner scanner = new Scanner(System.in);for(int i = 1; i <= 5; i++) {System.out.println("請輸入第" + i + "個學生的信息");System.out.println("姓名:");String name = scanner.next();System.out.println("語文 成績:");int chinese = scanner.nextInt();System.out.println("數學成績:");int math = scanner.nextInt();System.out.println("英語成績:");int english = scanner.nextInt();Student student = new Student(name, chinese, math, english);treeSet.add(student);}System.out.println("學生成績錄入完畢");System.out.println("按照分數排序后的結果是:");System.out.println(treeSet);}}class Student implements Comparable<Student>{private String name;private int chinese;private int math;private int english;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getMath() {return math;}public void setMath(int math) {this.math = math;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}public int getTotal() {return chinese + english + math;}@Overridepublic String toString() {return "Student [name=" + name + ", chinese=" + chinese + ", math=" + math + ", english=" + english + "]";}public Student(String name, int chinese, int math, int english) {super();this.name = name;this.chinese = chinese;this.math = math;this.english = english;}@Overridepublic int compareTo(Student o) {int temp = o.getTotal() - this.getTotal();if(temp == 0) {temp = o.chinese - this.chinese;}if(temp == 0) {temp = o.math - this.math;}if(temp == 0) {temp = o.english - this.english;}/*temp = (temp != 0 ? temp : (o.chinese - this.chinese));temp = (temp != 0 ? temp : (o.math - this.math));temp = (temp != 0 ? temp : (o.english - this.english));*/return temp;}}

輸出:(只有2名學生)

3.“aababcabcdabcde”獲取字符串中每個字母出現的次數,要求結果 a(5) b(4) c(3)

分析:1.將字符串轉換成一個字符數組

? ? ? ? ? ?2.對字符數組進行遍歷,放到 Set 集合中

package com.neuedu.collection;import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet;import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;public class Demo4 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入字符串");String str = scanner.next();TreeSet<Character> treeSet = new TreeSet<>();for(int i = 0; i < str.length(); i++) {treeSet.add(str.charAt(i));}System.out.println(treeSet);for(Character c : treeSet) {int count = 0;for(int i = 0; i < str.length(); i++) {if(str.charAt(i) == c) {count++;}}System.out.print(c+"(" + count + ") " );}}}

輸出:

方法二:

package com.neuedu.collection;import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet;import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;public class Demo4 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入字符串");String str = scanner.next();TreeMap<Character, Integer> map = new TreeMap<>();//遍歷字符串for(int i = 0; i < str.length(); i++) {//獲取每個字符Character key = str.charAt(i); //判斷map中是否包含該字符,如果不包含,value=1,if(!map.containsKey(key)) {map.put(key, 1);}else {//如果map中已經包含改字符,則取出原來的值+1map.put(key, map.get(key) + 1);} }StringBuffer sb = new StringBuffer();Set<Entry<Character, Integer>> entrySet = map.entrySet();for(Entry<Character, Integer> entry : entrySet) {sb.append(entry.getKey()).append("(").append(entry.getValue()).append(") ");}System.out.println(sb.toString());}

輸出:

標準方法:

//“aababcabcdabcde”獲取字符串中每個字母出現的次數,要求結果 a(5) b(4) c package com.hd.file; import java.util.Set; import java.util.TreeMap; public class demo3 {public static void main(String[] args) {String str = "aababcabcdabcde";TreeMap<Character,Integer> map = new TreeMap<Character,Integer>();char[] chs = str.toCharArray();for(Character ch:chs){Integer value = map.get(ch);if(value==null){map.put(ch, 1);}else{value++;map.put(ch, value);}}Set<Character> set = map.keySet();StringBuilder sb = new StringBuilder();for(Character s:set){Integer value = map.get(s);sb.append(s).append("(").append(value).append(")");}System.out.println(sb.toString());} }

輸出:

4.模擬斗地主洗牌、發牌、看牌

方法一:

分析:

分析:
?*?? ?1:創建一副牌
?*? ? ? ? ?1.1 : 創建一個牌盒
?*? ? ? ? ?1.2: 裝牌
?*?? ?2:洗牌
?*?? ?3:發牌
?*? ? 4:看牌

package com.neuedu.collection;import java.util.ArrayList; import java.util.Collections;public class PokerDemo {public static void main(String[] args) {ArrayList<String> poker = new ArrayList<>();String[] colors = {"","","",""};String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};for(String color : colors) {for(String number : numbers) {poker.add(color.concat(number));}}poker.add("大王");poker.add("小王");//洗牌Collections.shuffle(poker);//創建打牌的人ArrayList<String> rulai = new ArrayList<>();ArrayList<String> sunwukong = new ArrayList<>();ArrayList<String> weiwei = new ArrayList<>();ArrayList<String> dipai = new ArrayList<>();//摸牌for(int i = 0; i < poker.size(); i++) {if(i >= poker.size() - 3) {dipai.add(poker.get(i));}if(i % 3 == 0) {rulai.add(poker.get(i));}if(i % 3 == 1) {sunwukong.add(poker.get(i));}if(i % 3 == 2) {weiwei.add(poker.get(i));}}//看牌lookPoker("A", rulai);lookPoker("B", sunwukong);lookPoker("C", weiwei);lookPoker("底牌", dipai);}public static void lookPoker(String name, ArrayList<String> pai) {System.out.println(name + "的牌是:");for(String s : pai) {System.out.print(s + " ");}System.out.println();}}

輸出:

方法二:

思路:
?* ?? ?1:創建一個HashMap集合
?* 2:創建一個ArrayList,用來存放牌的編號
?* 3:創建花色數組和點數數組
?* 4:從1編號開始向Hashmap中存放相應的編號和對應的牌,同時往ArrayList中存儲編號
?* 5:洗牌(洗的是編號)
?* 6:發牌(發牌發的也是編號,為了保證編號是排序的,應該創建一個TreeSet集合)
?* 7:看牌(遍歷TreeSet,獲取編號,然后從HashMap中找到對應的牌)

package com.neuedu.collection;import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet;/*** 4: 模擬斗地主洗牌、發牌和看牌* 思路:* 1:創建一個HashMap集合* 2:創建一個ArrayList,用來存放牌的編號* 3:創建花色數組和點數數組* 4:從1編號開始向Hashmap中存放相應的編號和對應的牌,同時往ArrayList中存儲編號* 5:洗牌(洗的是編號)* 6:發牌(發牌發的也是編號,為了保證編號是排序的,應該創建一個TreeSet集合)* 7:看牌(遍歷TreeSet,獲取編號,然后從HashMap中找到對應的牌)**/ public class PokerDemo2 {public static void main(String[] args) {Map<Integer,String> poker = new HashMap<>();List<Integer> num = new ArrayList<>();String[] colors = {"","","",""};String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};int count = 1;for(String number : numbers) {for(String c : colors) {poker.put(count, c.concat(number));num.add(count);count++; }}poker.put(count, "小王");num.add(count);count++;poker.put(count, "大王");num.add(count);//洗牌Collections.shuffle(num);TreeSet<Integer> linQingXia = new TreeSet<>();TreeSet<Integer> zhouRunFa = new TreeSet<>();TreeSet<Integer> liuDeHua = new TreeSet<>();TreeSet<Integer> diPai = new TreeSet<>();for(int i = 0; i <num.size(); i++) {if(i >= num.size() - 3) {diPai.add(num.get(i));continue;}if(i % 3 == 0) {linQingXia.add(num.get(i));}if(i % 3 == 1) {zhouRunFa.add(num.get(i));}if(i % 3 == 2) {liuDeHua.add(num.get(i));} }//看牌lookPoker("A", linQingXia, poker);lookPoker("B", zhouRunFa, poker); lookPoker("C", liuDeHua, poker);lookPoker("底牌", diPai, poker);}public static void lookPoker(String name,Set<Integer> set,Map<Integer, String> map) {System.out.println(name + "的牌是:");for(Integer key : set) {System.out.print(map.get(key) + " ");}System.out.println();}}

輸出:

?

總結

以上是生活随笔為你收集整理的Java 学习(21)--集合笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。

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