A:简答题
- 1.请把我们讲解过的所有类中的方法在API中找到,并使用自己的话进行描述
Map
public V put(K key, V value): 添加功能
public void clear():全部删除
public V remove(Object key): 移除某个
public boolean containsKey(Object key): 是否包含键
public boolean containsValue(Object value):是否包含值
public boolean isEmpty(): 是否为空
public Set<Map.Entry<K,V>> entrySet():遍历功能
public V get(Object key): 获取键
public Set<K> keySet() : 遍历方式
public Collection<V> values(): 值
public int size():长度
Collections
public static <T> void sort(List<T> list) : 排序功能(自然)
public static <T> int binarySearch(List<?> list,T key):二分查找
public static <T> T max(Collection<?> coll) 获取最大值
public static void reverse(List<?> list) 反转功能
public static void shuffle(List<?> list) 随机置换功能
public static <T> void sort(List<T> list) : 排序功能(自然)
public static <T> void sort(List<T> list, Comparator<T> c) 排序功能(比较器)
- 2.请说明Map接口和Collection接口的区别
Collection存储单列元素或值, Map存储双列元素或值,且Map集合的数据结构只跟键有关
keySet() entrySet()
- 4.请说明HashMap和Hashtable的区别
HashMap: 线程不安全,效率高.允许null值和null键
Hashtable: 线程安全 ,效率低.不允许null值和null键
集合工具类 Collections针对的是 Collection集合
- 6.请自己整理份集合知识点文档
B:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。
class Car {
private String brand;//品牌
private int year; //制造年份
public Car () {}
public Car (String brand, int year) {
this.brand = brand;
this.year = year;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand(){
return brand;
}
public void setYear(int year) {
this.year = year;
}
public int getYear(){
return year;
}
}
答案: 第三行 无参构造 添加 super()
- 1.给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Test {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(new Integer(23), "Jim");
hm.put(new Integer(23), "Kevin");
Set<Integer> keys = hm.keySet();
for (Integer key : keys) {
String value = hm.get(key);
System.out.println( value );
}
}
}
答案: Kevin 键相同值覆盖
- 2.给出以下代码,已定义好Car类,请问该程序的运行结果是什么?如有问题,请说明原因。
class Test {
public static void main(String[] args) {
HashMap<Car, String> hm = new HashMap<Car, String>();
hm.put(new Car("宝马x5", 2014), "Jim");
hm.put(new Car("宝马x5", 2014), "Kevin");
Set<Car> cars = hm.keySet();
for (Car car : cars) {
String value = hm.get(car);
System.out.println(value);
}
}
}
答案:"宝马x5", 2014 Kevin
- 3.给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Test {
public static void main(String[] args) {
TreeMap<Integer, String> tm = new TreeMap<Integer, String>();
tm.put(new Integer(11), "Tom");
tm.put(new Integer(45), "David");
tm.put(new Integer(23), "Jim");
tm.put(new Integer(23), "Kevin");
Set<Integer> keys = tm.keySet();
for (Integer key : keys) {
String value = tm.get(key);
System.out.println( key +"--"+value );
}
}
}
答案: 11—Tom 键相同值覆盖 treeMap有排序功能
23--Kevin
45--David
- 4.给出以下代码,已定义好Car类,请问该程序的运行结果是什么?如有问题,请说明原因。
class Test {
public static void main(String[] args) {
TreeMap<Car, String> tm = new TreeMap<Car, String>(
new Comparator<Car>() {
@Override
public int compare(Car c1, Car c2) {
int num1 = c1.getYear() - c2.getYear();
int num2 = (num1 == 0) ? (c1.getBrand().compareTo(c2
.getBrand())) : num1;
return num2;
}
});
tm.put(new Car("宝马X5", 2014), "Tom");
tm.put(new Car("宝马X5", 2014), "David");
tm.put(new Car("奥迪Q7", 2014), "Jim");
tm.put(new Car("奥迪A4L", 2014), "Kevin");
Set<Car> cars = tm.keySet();
for (Car car : cars) {
String value = tm.get(car);
System.out.println(car.getBrand() + "--" + car.getYear() + "--"
+ value);
}
}
}
答案: 如何比较品牌? 宝马X5, 2014 David 奥迪Q7, 2014 Jim 奥迪A4L, 2014 Kevin
C:编程题
- 1.请编写程序,统计一个字符串中每个字符出现的次数
package org.lemon.MapTest; import java.util.HashMap; import java.util.Scanner; import java.util.Set; /** * @author zhaojiangbo 需求:用户随便输入一段字符串 统计字符串中每个字符出现的次数 */ public class MapTestDemo { public static void main(String[] args) { // 创建hashmap对象 HashMap<Character, Integer> map = new HashMap<Character, Integer>(); Scanner sc = new Scanner(System.in); System.out.println("请输入一串字母"); String str = sc.nextLine(); // 把字符串转成一个字符数组 char[] chs = str.toCharArray(); // 遍历这个数组 for (char key : chs) { Integer value = map.get(key); if (value == null) { map.put(key, 1); } else { value++; map.put(key, value);// 键相同,值覆盖 } } // 遍历 Set<Character> keySet = map.keySet(); StringBuilder sb = new StringBuilder(); for (Character ch : keySet) { sb.append(ch).append("(").append(map.get(ch)).append(")"); } System.out.println(sb.toString()); } }
- 2.请编写程序,存储自定义对象到HashMap集合中,并采用两种方式遍历
package org.lemon.Map; //HashMap集合键是String,值是Student import java.util.HashMap; import java.util.Map.Entry; import java.util.Set; /** * @author zhaojiangbo */ public class HashMapDemo { public static void main(String[] args) { //创建hashmap集合 HashMap<String, Student> hm = new HashMap<String, Student>(); //添加 hm.put("s1", new Student("我",12)); hm.put("s2", new Student("依",15)); hm.put("s3", new Student("然",17)); hm.put("s4", new Student("爱",14)); hm.put("s5", new Student("你",11)); hm.put("s5", new Student("你",11)); //遍历 方法1 Set<String> keySet = hm.keySet(); for(String s : keySet) { System.out.println(s +"---"+ hm.get(s).getName()+"---"+hm.get(s).getAge()); } System.out.println("------------------"); //遍历 方式2 Set<Entry<String,Student>> entrySet = hm.entrySet(); for(Entry<String,Student> en :entrySet) { String key = en.getKey(); Student value = en.getValue(); System.out.println(key +"---"+value.getName()+"---"+value.getAge() ); } } }
package org.lemon.Map; public class Student { private String name; private int age; public Student() { super(); } public Student(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; } @Override public String toString() { return "Student [getName()=" + getName() + ", getAge()=" + getAge() + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
- 3.请编写程序,存储自定义对象到TreeMap集合中,并采用两种方式遍历
package org.lemon.Map2; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; /** * @author zhaojiangbo *键是 Student 类型的 值是String 类型的 数据 *排序的元素必须实现Comparable接口 重写CmcompareTo(T)方法 */ public class TreeMapDemo3 { public static void main(String[] args) { //创建treemap对象 TreeMap<Student,String> treeMap = new TreeMap<Student,String>(); //添加 treeMap.put(new Student("放逐之刃",23), "s1" ); treeMap.put(new Student("疾风剑豪",20), "s2"); treeMap.put(new Student("圣枪游侠",21), "s3"); treeMap.put(new Student("机械先驱",25), "s4"); treeMap.put(new Student("麦林炮手",22), "s5"); //遍历 Set<Entry<Student,String>> entrySet = treeMap.entrySet(); for(Entry<Student,String> en : entrySet) { Student key = en.getKey(); String value = en.getValue(); System.out.println(key.getName()+"---"+key.getAge()+"---"+value); } } }
package org.lemon.Map2; public class Student implements Comparable<Student>{ private String name; private int age; public Student() { super(); } public Student(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; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public int compareTo(Student o) { // TODO Auto-generated method stub return 1; } }
- 4.请编写程序,完成集合嵌套,并遍历
HashMap嵌套HashMap
HashMap嵌套ArrayList
package org.lemon.MapTest;
import java.util.HashMap;
import java.util.Set;
/**
* @author zhaojiangbo
* 输出:
* 基础班
高圆圆 ---20
黄晓波 ---22
就业班
杨桃--- 21
果然 ---23
*/
public class MapTestDemo2 {
public static void main(String[] args) {
// 创建2个 小的集合
HashMap<String,Integer> basicMap = new HashMap<String, Integer>();
basicMap.put("高圆圆", 20);
basicMap.put("黄晓波", 22);
HashMap<String, Integer> workMap = new HashMap<String, Integer>();
workMap.put("杨桃", 21);
workMap.put("果然", 23);
//创建大集合
HashMap<String,HashMap<String,Integer>> superMap = new HashMap<String, HashMap<String,Integer>>();
superMap.put("基础班", basicMap);
superMap.put("就业班", workMap);
//遍历大集合
Set<String> keySet = superMap.keySet();
for(String s : keySet) {
System.out.println(s);
// 拿出每一个小集合
HashMap<String,Integer> hashMap = superMap.get(s);
//再遍历小集合
Set<String> smallSet = hashMap.keySet();
for(String s2 : smallSet) {
System.out.println("\t"+s2 +"---"+hashMap.get(s2));
}
System.out.println();
}
}
}- 5.请编写程序,完成模拟斗地主案例
package org.lemon.Poker;
import java.util.ArrayList;
import java.util.Collections;
public class PokerGameDemo {
public static void main(String[] args) {
// 斗地主 实现 发牌 和看牌
// 创建一个牌盒子
ArrayList<String> pokerBox = new ArrayList<String>();
// 定义花色数组
String[] colors = { "♥", "♠", "♦", "♣" };
// 定义牌号数组
String[] nums = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
// 循环拼牌
for (String color : colors) {
for (String num : nums) {
pokerBox.add(color + num);
}
}
// 添加大小王
pokerBox.add("☼");
pokerBox.add("☽");
// 洗牌
Collections.shuffle(pokerBox);
Collections.shuffle(pokerBox);
Collections.shuffle(pokerBox);
// 发牌 三个人 一副底牌
// 创建三个人的集合
ArrayList<String> 高圆圆 = new ArrayList<>();
ArrayList<String> 杨桃 = new ArrayList<>();
ArrayList<String> 黄晓波 = new ArrayList<>();
ArrayList<String> 底牌 = new ArrayList<>();
// 发牌
// 吴宗宪 0 3 6
// 周星驰 1 4 7
// 曾志伟 2 5 8
for (int i = 0; i < pokerBox.size(); i++) {
// 留底牌
if (i >= pokerBox.size() - 3) {
底牌.add(pokerBox.get(i));
} else if (i % 3 == 0) {
高圆圆.add(pokerBox.get(i));
} else if (i % 3 == 1) {
杨桃.add(pokerBox.get(i));
} else if (i % 3 == 2) {
黄晓波.add(pokerBox.get(i));
}
}
// 看牌
lookPai("高圆圆", 高圆圆);
lookPai("杨桃", 杨桃);
lookPai("黄晓波", 黄晓波);
lookPai("底牌", 底牌);
// System.out.println(pokerBox);
}
private static void lookPai(String string, ArrayList<String> list) {
System.out.println(string);
for (String pai : list) {
System.out.print(pai + " ");
}
System.out.println();
}
}2:需求:请大家把E:\JavaSE目录下所有的java结尾的文件的绝对路径给输出在控制台。
package org.lemon.File;
import java.io.File;
/**
* @author Lemon
*/
public class FileTestDemo {
public static void main(String[] args) {
File file = new File("E:\\JavaSE");
File[] listArray = file.listFiles();
if(listArray!=null) {
for(File f :listArray) {
if(file.isFile()) {
if(file.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
}
}
}
}
3:下面程序段的执行结果是什么?( D )
public class Foo{
public static void main(String[] args){
try{
return;}
finally{System.out.println("Finally");
}
}
}
A.编译能通过,但运行时会出现一个例外。 B.程序正常运行,并输出 "Finally"。
C.程序正常运行,但不输出任何结果。 D.因为没有catch语句块,所以不能通过编
4:对于已经被定义过可能抛出异常的语句,在编程时( A )。
A.必须使用try/catch语句处理异常,或用throw将其抛出。
B.如果程序错误,必须使用 try/catch语句处理异常。
C.可以置之不理。
D.只能使用try/catch语句处理。
5:哪个关键字可以抛出异常?( B )
A.transient B.throw C.finally D.catch
6:请问所有的异常类皆继承哪一个类?( B )
A.java.lang.Throwable B.java.lang.Exception
C.java.lang.Error D.java.io.Exception
7.System类在哪个包中?( B )
A.java.awt B.java.lang C.java.util D.java.io
本文深入解析Java中的Map接口和Collection接口的区别,详细介绍了HashMap与Hashtable的不同之处,通过多个实例演示了如何使用HashMap和TreeMap存储及遍历自定义对象,同时提供了理解集合嵌套和异常处理的关键代码示例。
1506

被折叠的 条评论
为什么被折叠?



