集合的补充
一、Map
K-此映射所维护的键(Key)的类型,相当于目录。
V-映射值(Value)的类型,相当于内容。
该集合中key是不允许重复的,而且一个key只能对应一个value。
该集合的主要实现类有:HashMap类和TreeMap类。
常用的方法
V put(K key,V value) - 将Key-Value对存入Map,若集合中已经包含该Key,则替换该Key所对应的Value返回值为该Key原来所对应的value,若没有则返回null
V get(0bject key) - 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
boolean containsKey(0bject key) - 如果此映射包含对于指定键的映射关系,则返回 true。
boolean containsvalue(0biect value) - 如果此映射将一个或多个键映射到指定值,则返回 true。
V remove(object key) - 从此映射中移除指定键的映射关系(如果存在)。
public class MapTestTest {
@Test
public void hashMapTest() {
Map<Integer,String> map = new HashMap<>();
//添加元素
map.put(1,"q");
map.put(2,"w");
map.put(3,"e");
map.put(4,"r");
System.out.println(map);
String value = map.get(3);
System.out.println("3=" + value);
boolean b = map.containsKey(5);
System.out.println(b);
b = map.containsValue("baoer");
System.out.println(b);
b = map.containsValue("q");
System.out.println(b);
//删除map集合中的元素,根据key
String v = map.remove(2);
System.out.println("删除的值为" + v);
}
二、Map的遍历
Map集合的遍历方式
方式一:自动调用toString方法
方式二:调用keySet方法获取Map集合中所有的key
方式三:调用entrySet方法获取Map集合中所有的键值对
@Test
public void iteratorMapTest(){
Map<Integer,String> map = new HashMap<>();
//添加元素
map.put(1,"q");
map.put(2,"w");
map.put(3,"e");
map.put(4,"r");
//使用keySet方法遍历Map集合中的元素
Set<Integer> set = map.keySet();
for (Integer i:set){
System.out.println(i + "=" + map.get(i));
}
//使用entrySet
Set<Map.Entry<Integer,String>> entries = map.entrySet();
for (Map.Entry<Integer,String> e:entries){
System.out.println(e);
}
}
异常
(1)基本概念
在某些特殊情况下异常不便于处理或无法处理时,就可以将异常转移给该方法的调用者,这个过程就叫做异常的抛出。
(2)语法格式
访问权限 返回值类型 方法名(形参列表)throws 异常类型,...{方法体};
(3)方法重写的原则
a.要求方法名相同、参数列表相同、返回值类型相同,从jdk1.5开始允许返回子类类型;
b.要求访问权限不能变小,可以相同或变大;
c.要求不能抛出更大的异常;
//定义Person
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) throws AgeException {
setName(name);
setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) throws AgeException {
if (age > 0 && age < 150) {
this.age = age;
}else {
throw new AgeException("年龄异常!");
}
}
@Override
public String toString() {
return "Person " +
"name='" + name + '\'' +
", age=" + age ;
}
}
自定义异常:
基本概念
虽然ava官方提供了大量的异常类,但没有提供针对年龄不合理的异常,此时若希望描述这样的异常信息,就需要程序员自定义异常类。
实现流程
a.自定义xxxException继承自Exception或者其子类。 b.提供两个版本的构造方法,一个是无参构造方法,另外一个是字符串作为参数的构造方法。
public class AgeException extends Exception{
public AgeException() {
}
public AgeException(String msg) {
super(msg);
}
}
当年龄为负数的时候,输出异常
public class ExceptionTest01 {
public static void main(String[] args) {
try {
Person p = new Person("x",-10);
System.out.println(p);
} catch (AgeException e) {
e.printStackTrace();
}
}
}
//补充:除数异常
public class ExceptionTest02 {
public static void main(String[] args) {
try {
System.out.println(10 / 0);
System.out.println("....");
}catch (ArithmeticException e){
System.out.println("出异常");
}finally {
System.out.println("finally");
}
}
}