Set接口与实现类
特点:无序无下标,元素不可重复。
全部继承自collection中的方法
使用forrach循环遍历:
For(数据类型 局部变量 :集合名){
// 循环内部的局部变量,代表当次循环从集合中取出的对象
}
HashSet:基于HashCode实现元素不重复。当存入元素的哈希码相同时,会调用== 或 equals进行确认,结果为true,拒绝后者存入。
LinkedHashSet:链表实现的HashSet,按照链表进行存储,即可保留元素的插入顺序。
TreeSet:基于排列顺序实现元素不重复。实现了SortedSet接口,对集合元素自动排序。元素对象的类型必须实现Comparable接口,指定排序规则,通过CompareTo方法确定是否为重复元素。
Map接口与实现类
Map接口的特点:用于存储任意键值对(key-value),键:无下标、不可重复(唯一),值:无下标,可以重复。
方法:
Put(K Key,V value) // 将对象存入到集合中,关联键值。Key重复则覆盖原值。
Get(object key)//根据键值获取对应的值
set<K> KeySet()// 返回所有key
Collection<v> values() // 返回包含所有值的collection集合
Set<map.entry<K,V> //键值匹配的set集合
实现类:HashMap,线程不安全,运行效率快;允许用null作为key或是value
Hashtable:线程安全运行效率慢,不允许null作为key或value
Properties:hashtable的子类,要求key和value都是string。通常用于配置文件的读取
TreeMap:实现了sortedMap接口(map的子接口),可以对key自动排序,key需要实现comparable接口。
注意treemap一定要用排序器,如果treemap的构造方法中没有传递排序器对象,默认用的时自然排序器。
Key的唯一性:通过排序器的排序方法返回0,表示key相同key存在value覆盖。
Key的可排序性:通过排序的排序方法放回正数排在右子节点(后面),返回负数排在左子节点(前面)。
//获得set集合迭代器对象
Iterator<Entry<Integer, String>> it1=hset1.iterator();
//循环判断迭代器后面是否有元素可迭代
while (it1.hasNext()) {
Entry<Integer, String> e1=it1.next();
System.out.println(e1.getKey()+","+e1.getValue());
}
//删除集合中元素
hmap1.remove(11);
//将map集合中所有Key存在set集合中
Set<Integer> set2=hmap1.keySet();
//遍历所有Key
for (Integer k : set2) {
//通过K得到value
System.out.println(k+","+hmap1.get(k));
}
异常
错误Error:不可处理,系统错误,不可恢复的错误。
异常:可以处理
常见的异常:
编译时异常:直接在编码界面报错的异常就是编译异常
运行时异常:java.lang.nullpointerexception(空指针异常)、java.lang.classnoftoundexception(指定的类不存在)、java.lang.aeithmeticexception(数学运算异常)、java.lang.arrayindexoutofboundsexception(数组下标越界)、java.lang.ArrayStoreEception(数据存储异常)、NumberFormatException(数据格式错误)
异常处理方式
Try- catch-finally:“抛”程序正常执行时产生异常,就会在异常代码处生成一个对应的异常类的对象,并将此对象抛出,一旦抛出对象以后,其余的地代码就不再执行。
Try-catch-catch-finally中写多个catch的目的就是把try块里面的代码可能出现的异常分类处理·实现精准处理异常类型。
Throws + 异常类型
快捷键:alt + shift +z
Finally的出现就是为了弥补try在报错的时候会直接跳出代码块(try自己)的这个缺陷
Finall在实际的开发场景中,主要是为了释放资源的
自定义异常:需要继承Exception或其子类,代表特定的问题
异常类一定要新建一个exception包,类名后面也要加一个Exception
语法:public class 自定义异常类名 extends jdk中任意一个异常类{
Public 自定义异常类名(String mess){ Super(mess);}}
例:
public class MyException extends Exception {
public MyException(String mess) {
super(mess);
}
public static void main(String[] args) throws MyException {
show();
}
private static void show() throws MyException {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入取整数");
int num = scanner.nextInt();
if (num > 8 && num < 15) {
System.out.println("当前数:" + num);
} else {
throw new MyException("输入有误");
}
}
}