Java异常和集合总结

异常

当程序没有按照设计的逻辑运行时,产生了不可预知的错误,就叫异常

异常的分类

所有异常的根类Throwable,又分为Error和Exception两个大类

  • Error,一般为虚拟机错误,这种错误我们的代码没有办法处理
  • Exception,我们可以用通过代码抛出异常或处理异常,Exception又能分为运行时异常(RuntimeException)和非运行时异常

异常的处理

在Java中处理异常有两种方式抛出异常和捕获异常

  1. throws和throw抛出异常
//在方法名后面添加throws申明后面跟异常类型,异常的类型必须要比代码中抛出的异常类型大
public void fun() throws Exception{
//用throw关键字抛出异常,后面跟异常的类型,括号中的字符串就是异常的信息
	throw new Exception("出现异常");
}
  1. try catch捕获异常
    try{
    //会出现异常的代码
    }
    //catch语句可以有多个,如果只要一个catch语句,它包含的异常类型要大于等于出现异常代码中最大的异常类型
    catch(异常类型 e){
     e.printStackTrace();
     }
     //finally语句中的代码是一定会执行的,不管有没有异常,finally语句是可选的,try catc是必须有的
     finally{
     }
    

集合

List

List是列表,用来存储一组数据的数据结构
List可变长的数据结构, 可以知道List里面存有多少个数据
List里面可以保存不同类型的数据
List是有序列表, 数据可以重复

ArrayList

ArrayList是采用数组方式实现的
读和遍历比较快, 插入和删除数据比较慢

  • ArrayList的使用
//用ArrayList创建一个List类型的对象
List list = new ArrayList();//默认长度为10,可扩展
//add()添加方法,list中可以存放不同数据类型的数据
list.add(1);
list.add("张三");
list.add(5.1);
//get()返回返回指定下标的元素,下标从0开始,未指定泛型返回的是Object类型的数据
Integer i = (Integer)list.get(0);
String str = (String)list.get(1);
//size()返回列表中实际数据个数
list.size();
//在指定下标位置插入一个数据,原来位置的数据往后面移动一位 
list.add(2, 3.14); 
//替换指定下标位置的元素 
list.set(4, true); 
//删除指定下标的元素 
list.remove(3); 
//判断是否包含某个元素,如果包含返回true 
list.contains("abc"); 
//返回指定的元素在列表中的序号;没有找到返回-1  
list.indexOf("abc"); 
list.lastIndexOf("abc"); 
//截取子列表,左闭右开区间 
List listSub = list.subList(1, 3); 
//列表转换为数组 
Object[] array = list.toArray(); 
System.out.println("数组长度:" + array.length); 
//通过Arrays工具类把一个数组转为List 
List objectList = Arrays.asList(array); 
//清除列表的所有数据 
list.clear(); 
//判断列表是否是空的(没有元素),是空返回true;否则返回false 
list.isEmpty();
  • LinkedList
    采用双向链表实现
    在这里插入图片描述
  • 插入和删除速度快
  • 查找和遍历速度慢
  • 链表里面的数据是保存的地址
  • 每个节点除了自身数据的地址外,还保存下一个和下一个节点的地址
  • LinkedList一些特殊方法
LinkedList list = new LinkedList(); 
list.add(5); 
//在列表的最前面插入元素 
list.addFirst(1); 
//在列表的最后插入元素 
list.addLast(9); 
//获取第一个元素 
System.out.println(list.getFirst()); 
//获取最后一个元素 
System.out.println(list.getLast()); 
//删除第一个节点 
list.removeFirst(); 
//删除最后一个节点 
list.removeLast();
list.add(7); 
list.add(9); 
//出栈, 弹出第一个元素(会从列表中删除) 
System.out.println("弹出元素:" + list.pop()); 
//入栈(压栈),在最前面插入一个元素 
list.push(3);

泛型

因为集合可以存各种类型的数据,但是取出来都是Object,所以需要进行强制类型转换。
泛型就是用来解决这个问题,在创建List对象时指定存储的类型,在add和get自动就采用泛型指定的类

泛型不能时基本类型,只能是引用类型

//使用泛型,定义变量时,类型后面跟上尖括号,尖括号写上数据类型, 
// new对象时候,类后面也要有尖括号,尖括号里不写类型,默认跟定义变量泛型一致 
//泛型只能使用引用类型,不能用基本类型 
List<String> listStr = new LinkedList<>(); 
//一旦指定泛型后,相关方法的参数,返回类型都跟泛型的类型一样 
listStr.add("aaa"); 
listStr.add("bbb"); 
String s = listStr.get(0); 
System.out.println(s);

Set

无序集合,元素不重复
没有索引(序号),不能通过下标访问

HashSet

采用hash表实现
元素不重复, 无序的, 允许存null
不能按下标读取元素,只能遍历

  • HashSet常用方法
//创建HashSet。 默认长度16, 加载因子为0.75 
HashSet<String> set = new HashSet<>(); 
//往set添加元素 
set.add("Java"); 
set.add("Html"); 
set.add("SQL"); 
set.add("Java");//重复的内容,在set里面只有一个 
//返回元素的个数 
System.out.println(set.size()); 
//遍历set的元素 
for (String str : set) { 
System.out.println(str); 
}
//查找是否包含某个对象(对象要重写hashCode和equals) 
System.out.println(set.contains("Java")); 
//删除set的集合 
set.remove("Java"); 
//清空set 
set.clear(); 
//判断set是否是空的 
System.out.println(set.isEmpty());

TreeSet

TreeSet的特性:

  • TreeSet采用红黑树数据结构来实现的。
  • 不能添加null
  • 不能添加重复的元素
  • 添加的元素会被排序,遍历出来是按顺序排列的
  • TreeSet的元素必须要实现Comparable (如果没有实现Comparable 接口,运行时抛类型转换错
    误异常ClassCastException)
    常用方法 :
TreeSet<Integer> set = new TreeSet<>(); 
set.add(20); 
set.add(25); 
set.add(8); 
set.add(16); 
//返回元素的个数 
System.out.println("元素个数:" + set.size()); 
//返回排序后的第一个元素 
System.out.println("first: " +set.first());
//返回排序后最后一个元素 
System.out.println("last: " + set.last()); 
//返回比指定元素大的最小元素 
System.out.println("ceiling: " + set.ceiling(18)); 
//返回比指定元素小的最大元素 
System.out.println("floor: " +set.floor(18)); 
//遍历是按元素排序显示 
for (Integer i : set) { 
System.out.println(i); 
}
//删除指定的对象 
set.remove(20); 
//清空所有元素 
set.clear(); 
//判断是否是空(没有元素) 
System.out.println("判断是否是空:" + set.isEmpty());

Map

  • 保存键值对数据(key - value)
  • key不能重复, value可以重复
  • key和value都可以为null

HashMap

采用数组+链表+红黑树的数据结构来实现的
先根据hash code保存数组中
如果出现hash碰撞,用链表
链表长度超过8,改用红黑树
基本使用方法:

//默认长度为16,加载因子0.75 
HashMap<String, String> map = new HashMap<>(); 
//往map插入数据,第一个参数是Key,第二个参数是value 
map.put("yyds", "永远的神"); 
map.put("emo", "抑郁了"); 
map.put("u1s1", "有一说一"); 
//根据key查询对象value 
System.out.println(map.get("yyds")); 
//判断map中是否存在某个key 
System.out.println("containsKey: " + map.containsKey("yyds")); 
System.out.println("containsValue: " + map.containsValue("永远的神")); 
//返回map元素的个数 
System.out.println("size: " + map.size()); 
//遍历map 
System.out.println("=======遍历value====="); 
Collection<String> values = map.values();//以Collection数据类型返回所有的 value 
for (String str : values) { 
System.out.println(str); 
}
System.out.println("========遍历key======="); 
Set<String> strings = map.keySet();
//以set数据类型返回所有的key 
for (String str : strings) { 
System.out.println(str); 
}
System.out.println("========遍历Entry======");
Set<Map.Entry<String, String>> entries = map.entrySet(); 
for (Map.Entry<String, String> entry : entries) {
 System.out.println(entry.getKey() + ", " + entry.getValue()); 
 }
 //删除key为指定值的元素 
 map.remove("yyds"); 
 //清除所有元素 
 map.clear(); 
 //判断map是否为空 
 System.out.println("isEmpty: " + map.isEmpty());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值