java集合框架(二)及异常

java集合框架(二)

1、LinkedSet

特点:唯一 Hashcode() equal()

​ 链式存储结构

package com.qf.pro2103.day17;

import java.util.*;

public class Demo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Set<String> sets=new LinkedHashSet<String>();
        //链表存储结构:通过链表来记录的添加顺序
        sets.add("xxx");
        sets.add("zzz");
        sets.add("xxx");
        for(String set:sets) {
        	System.out.println(set);
        }
        
	}

}
2、Sortedset接口的实现类TreeSet

​ 大话设计模式

​ 大话数据结构

​ 数据结构—数组 数(二叉树 平衡二叉树 B+数 红黑树)队列(先进先出) 堆栈(先进后出)

​ 【结论】:HashSet不能排序,TreeSet在类实现了Comparable类后自动排序

package com.qf.pro2103.day17;

public class Student implements Comparable<Student> {
	
	public Student() {
		super();
	}
	
	public Student(String stuNo, String stuName, int age) {
		super();
		this.stuNo = stuNo;
		this.stuName = stuName;
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", age=" + age + "]";
	}

	private String stuNo;
	private String stuName;
	private int age;
	public String getStuNo() {
		return stuNo;
	}
	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public int compareTo(Student o) {
		// TODO Auto-generated method stub
		return this.age-o.age;
	}
}

TreeSet<Student> stus=new TreeSet<Student>();
		Student s1=new Student("qf001","zzz",25);
		Student s2=new Student("qf002","lll",20);
		Student s3=new Student("qf003","hahaha",18);
		Student s4=new Student("qf004","ccc",19);
		stus.add(s1);
		stus.add(s2);
		stus.add(s3);
		stus.add(s4);
		for(Student stu:stus){
			System.out.println(stu);
		}
3、Map接口实现类HashMap 重点

HahMap底层是哈希表:数组+单链表(如果单链表长度超过8,转为红黑树)

存储形式:key键-value值对象

通过对key来确定在哈希表的存储位置,key相同,value发生覆盖

package com.qf.pro2103.day17;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.qf.pro2103.day16.Student;

public class Demo3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, Student> map = new HashMap<String,Student>();
		Student s1=new Student("qf001","zzz",25);
		Student s2=new Student("qf002","lll",20);
		Student s3=new Student("qf003","hahaha",18);
		Student s4=new Student("qf004","ccc",19);
		Student s5=new Student("qf003","范世龙",19);
		//添加到集合
		map.put("aaa", s1);
		map.put(s2.getStuNo(), s2);
		map.put(s3.getStuNo(), s3);
		map.put(s4.getStuNo(), s4);
		//如果key重复会发生value的覆盖
		map.put(s5.getStuNo(), s5);
		map.put("bbb", s2);
		//通过key来获取对应value
	    Student stu=map.get("qf003");
	    System.out.println(stu);
	    
	    //map集合如何遍历
	    //方式1:先获取所有key值,然后遍历key值集合,通过key获取value
	    // 获取所有key
	    Set<String> keys= map.keySet();
	    //然后遍历key所在集合
	    for(String k : keys){
	    	Student s=map.get(k);
	    	System.out.println("key:"+k+",value:"+s);
	    }
	    System.out.println("---------------------------------");
	    //方式2:先获取所有Key,然后通过迭代器遍历key 通过key获取value
	    Iterator<String> it=keys.iterator();
	    while(it.hasNext()){
	    	String k=it.next();
	    	Student s=map.get(k);
	    	System.out.println("key:"+k+",value:"+s);
	    }
	    System.out.println("---------------------------------");
	    System.out.println(map.get("aaa"));
		//方式3:key-value一起获取, entry=key+value
	    Set<Entry<String,Student>> set= map.entrySet();
	    for(Entry<String, Student> et:set){
	    	System.out.println("key="+et.getKey()+"----value="+et.getValue());
	    }
	    System.out.println("---------------------------------");
	    //获取所有的value
	    Collection<Student> list= map.values();
	    for(Student s:list){
	    	System.out.println(s);
	    }
	    
	}

}

HashTable:哈希表存储结构 线程安全,效率低,不允许null值作为key和value

HashMap:哈希表存储结构 非线程安全 效率高,允许null作为value

3、异常

程序运行中的非正常情况,导正程序无法继续运行

对异常进行处理,保障程序继续运行

异常的父类:Throwable

异常的分类:

  • 错误Error:软件(JVM)软件或硬件出现的错误,程序的逻辑 无法手动处理
  • 异常Exception:程序在运行过程中产生的问题
    1. 运行时异常RunTimeException:在程序运行中产生的,程序员可以处理也可以不处理
    2. 受查异常CheckedException:必须进行异常处理,否则程序无法编译运行

常见的异常:

ArithmeticException:算术异常

NullPointerException:空指针异常 对象没有被new 就访问其成员

IndexOutOfBoundsException:数组或集合越界

对异常处理的方式:

方式一:捕获

try{

//可能会发生的异常

}catch(异常类型 对象名){

//catch捕获try中产生的和catch种类型相同的或是其子类的异常

//提示异常信息给用户后面的程序继续运行

}

//-------------------------

【说明】在catch中不要直接使用Exception进行捕获,不能明确具体的异常原因,建议使用多路捕获

【注意】再多路catch捕获异常时,异常类型一定要子类在前,父类在后

try{

//

}filally{

//无论有无异常,无论异常是否被捕获到,都能被执行的语句块

}

方式二:抛出异常**

package com.qf.pro2103.day17;

public class Test {
	// throws 抛出异常,把方法体内差生的异常抛给方法的调用者
	public int com(int num1,int num2) throws ArithmeticException{
		int result=num1/num2;
		return result;
	}
}

4、自定义异常

当不符合自定义的业务时,可以手动创建异常对象,然后抛出这个异常

package com.qf.pro2103.day17;

public class PriceException extends Exception {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public PriceException(){
		
	}
	public PriceException(String meg){
		super(meg);
	}

}
package com.qf.pro2103.day17;

public class Test {
	// throws 抛出异常,把方法体内差生的异常抛给方法的调用者
	public int com(int num1,int num2) throws ArithmeticException{
		int result=num1/num2;
		return result;
	}
	public void pay(int money)throws PriceException{
		if(money<0){
			//手动创建异常对象
			throw new PriceException("你输入的金额数不正确!");
		}else{
			System.out.println("付款成功!付款金额为:"+money);
		}
	}
}
package com.qf.pro2103.day17;

public class Demo12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test test=new Test();
		try {
			test.pay(-10);
		} catch (PriceException e) {
			// TODO Auto-generated catch block
			System.out.println("发生异常,异常原因为:"+e.getMessage());
			//打印方法调用过程产生的所有异常
			//e.printStackTrace();
		}
	}

}

总结:

异常处理方式有两种:

1、捕获异常:try-catch

2、抛出异常:throw-throws

​ throw,用在方法内部,作用是抛出一个异常 throw new PriceException(“你输入的金额数不正确!”);

​ throws,用在方法的)的后面,作用是限定抛出的异常类型

​ public int com(int num1,int num2) throws ArithmeticException

自定义异常:

1、新建自定义异常类,继承Exception或某个异常子类

2、重载构造方法,在有参构造方法中,通过参数传递异常信息

多路捕获异常:catch的顺序

异常Exception:getMessage(); 返回字符串:异常信息

​ printStackTrace() 打印方法调用过程中,异常的传递

finally:无论有无异常,无论能够捕获到,都能被执行的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值