Java-11.18/19作业

本文深入解析Java中的Map接口和Collection接口的区别,详细介绍了HashMap与Hashtable的不同之处,通过多个实例演示了如何使用HashMap和TreeMap存储及遍历自定义对象,同时提供了理解集合嵌套和异常处理的关键代码示例。

A:简答题

  1. 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) 排序功能(比较器)

 

  1. 2.请说明Map接口和Collection接口的区别

     Collection存储单列元素或值,  Map存储双列元素或值,且Map集合的数据结构只跟键有关

      keySet()       entrySet()

  1. 4.请说明HashMapHashtable的区别

    HashMap: 线程不安全,效率高.允许null值和null

    Hashtable: 线程安全 ,效率低.不允许null值和null

    集合工具类 Collections针对的是 Collection集合

  1. 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. 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 键相同值覆盖

  1. 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

  1. 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


  1. 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. 1.请编写程序,统计一个字符串中每个字符出现的次数
  2. 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());
    	}
    }
    


  3. 2.请编写程序,存储自定义对象到HashMap集合中,并采用两种方式遍历
  4. 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;
    	}
    }
      
    


  1. 3.请编写程序,存储自定义对象到TreeMap集合中,并采用两种方式遍历
  2. 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;
    }
       
    }
    


  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();
		  }
	}
}


  1. 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();

	}

}


1:需求:递归删除带内容的目录 假设删除当前项目下的目录:demo,demo中可以有文件夹自己给出
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




{ "name": "@labelu/frontend", "version": "5.8.11", "private": true, "dependencies": { "@ant-design/icons": "^4.6.2", "@labelu/i18n": "1.0.6", "@labelu/audio-annotator-react": "1.8.6", "@labelu/components-react": "1.7.11", "@labelu/image": "1.4.0", "@labelu/formatter": "1.0.2", "@labelu/image-annotator-react": "2.4.6", "@labelu/interface": "1.3.1", "@labelu/video-annotator-react": "1.4.12", "@labelu/video-react": "1.5.3", "@tanstack/react-query": "^5.0.0", "antd": "5.10.1", "axios": "^1.3.4", "classnames": "^2.3.2", "history": "^5.0.0", "iframe-message-bridge": "1.1.1", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "mockjs": "^1.1.0", "react": "^18.2.0", "react-document-title": "^2.0.3", "react-dom": "^18.2.0", "react-hotkeys-hook": "^4.4.1", "react-i18next": "^11.18.6", "react-intl": "^5.24.7", "react-intl-universal": "^2.6.11", "react-monaco-editor": "^0.50.1", "react-responsive": "^9.0.2", "react-router": "^6.8.2", "react-router-dom": "^6.8.2", "styled-components": "^5.3.6", "uuid": "^9.0.0" }, "scripts": { "postinstall": "node ./scripts/generate_css_variables_from_antd_theme_token.js", "start": "vite --port 3004", "preview": "vite preview --port 3007", "build": "cross-env CI=false npm --filter=./packages/* --filter=. run build", "package:dist": "cross-env DIST=true vite", "release": "semantic-release", "type-check": "tsc --noEmit", "openapi": "ts-node openapi.config.ts" }, "author": "wuhui", "keywords": [ "annotation", "canvas", "react" ], "homepage": "/", "bugs": { "url": "https://github.com/opendatalab/labelU.git", "email": "751569801@qq.com" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "devDependencies": { "@octokit/rest": "^19.0.7", "@semantic-release/commit-analyzer": "^9.0.2", "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@semantic-release/github": "^8.0.7", "@semantic-release/release-notes-generator": "^10.0.3", "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", "@types/http-proxy-middleware": "^0.19.3", "@types/jest": "^26.0.15", "@types/lodash": "^4.14.191", "@types/lodash-es": "^4.17.6", "@types/mockjs": "^1.0.2", "@types/node": "^12.20.55", "@types/react": "^18.0.28", "@types/react-document-title": "^2.0.5", "@types/react-dom": "^18.0.11", "@types/recharts": "^1.8.13", "@types/rx": "^4.1.2", "@types/styled-components": "^5.1.26", "@types/uuid": "^9.0.0", "@vitejs/plugin-react": "^3.1.0", "analyze-wiz": "^1.2.0-beta.2", "cross-env": "^7.0.3", "json-schema-library": "^9.1.2", "minimist": "^1.2.7", "prettier": "^2.0.1", "sass": "^1.56.1", "semantic-release": "^19.0.3", "semantic-release-github-pullrequest": "^1.3.0", "shelljs": "^0.8.5", "simple-progress-webpack-plugin": "^2.0.0", "terser-webpack-plugin": "^4.2.3", "typescript": "4.8.4", "vite": "^4.1.1", "vite-plugin-ejs": "^1.6.4", "vite-plugin-imp": "^2.3.1", "vite-plugin-svg-icons": "^2.0.1", "vite-plugin-svgr": "^2.4.0", "vite-plugin-ts-mono-alias": "^1.1.8" } } 我想把@labelu开头的依赖都都通过packages里面的包安装
最新发布
05-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值