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:看牌
輸出:
方法二:
思路:
?* ?? ?1:創建一個HashMap集合
?* 2:創建一個ArrayList,用來存放牌的編號
?* 3:創建花色數組和點數數組
?* 4:從1編號開始向Hashmap中存放相應的編號和對應的牌,同時往ArrayList中存儲編號
?* 5:洗牌(洗的是編號)
?* 6:發牌(發牌發的也是編號,為了保證編號是排序的,應該創建一個TreeSet集合)
?* 7:看牌(遍歷TreeSet,獲取編號,然后從HashMap中找到對應的牌)
輸出:
?
總結
以上是生活随笔為你收集整理的Java 学习(21)--集合笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下面代码打印的结果?
- 下一篇: java美元兑换,(Java实现) 美元