Collections
作用:对集合操作的工具
常用方法:
1. static void sort(List<T> list):排序
按照存储数据的hashCode值进行排序
Collections.sort(list);//对list进行排序
2.static void sort(List<T> list,Comparator<? super T> c):排序
按照指定的比较器进行排序
3. static void reverse(List<?> list):翻转
Collections.reverse(list);//对list进行反转
效果明显
4. static void shuffle(List<?> list):打乱
Collections.shuffle(list);//对list打乱
运行一次乱一次
5. static boolean addAll(Collection c,T.....elements)
作用:给集合添加多个
参数:c为集合,elements为添加的元素
可以看到有返回值的,如果存入不正确就会错误
Collections.addAll(list, 7,7,5,56,4,54,6,56,456,45,6,4);//给list添加简单了
list.add(12);
list.add(11);
list.add(1);
list.add(4);
list.add(78);
原来这样添加很麻烦
6. static void copy(List 前者,List 后者):拷贝
后者集合中的元素个数需要小于前集合
System.out.println(list1);
System.out.println(list);
Collections.copy(list1, list);//后者的数据按顺序拷贝到前者,会覆盖前者
System.out.println(list1);//所以前者的元素个数要大于等于后者
7. int binarySearch(List 查找的集合,T目标数组)查找
返回值:目标数据在集合中的位置,如果不存在返回-1
该方法使用二分查找,所以集合必须有序
Collections.sort(list);//对list进行排序
System.out.println(list);
System.out.println(Collections.binarySearch(list, 8));//查找list集合中8的位置
由于使用二分查找,如果数据没有按顺序排列,非常可能寻找失误
Map
简介
字典,作用为存储一组数据类型相同的数据
特点:按照键值对的方式存储
键(key),值(vlue),一个键对应一个值,为一一对应关系,值可相同,键不能
要求
键:不允许重复
值:可以重复
Map体系
Map
HashMap:
特点:key不能重复,允许null作为键或值,线程不安全,jdk1.2出现
Hashtable
特点:key不能重复,不允许null作为键值或值,线程安全,jdk1.0出现
TreeMap
特点:键要么有比较性,要么有比较器
Map底层使用Set实现,Set底层使用Map实现
Map提供的方法
HashMap<Integer, String> a1 = new HashMap<Integer, String>();//new一个叫a1的字典
1.增
v put(k key,v value):将该键值对存储到字典中
a1.put(2,"b");
void pubAll(Map m):添加多个
a1.putAll(a2);//a2加到a1
2.删
v remove(Object key):删除该key所在的键值对
返回值:删除的键值对中的值
System.out.println( a1.remove(1));//在a1中删除key=1的键值对
System.out.println(a1);
void clear();清空
a1.clear();
3.改
v put(k key,v value)
注意:如果字典中不存在该key,那么本次就是添加,有的话就是修改
4.查
4.1int size();查询字典中储存的键值对的个数
a1.size();
4.2 boolean isEmpty();查询字典是否为空
a1.isEmpty();
4.3 boolean containskey(Object key):判断指定key是否存在
a1.containsKey(2);//键为2的是否存在
4.4 boolean containsValue(Object value):判断指定的值是否存在
a1.containsValue("d");//值为d的是否存在
4.5 V get(Object key):获取key对应的value
a1.get(1);
4.6 Set<k> keySet():获取所有key的集合
System.out.println(a1.keySet());
4.7 Collection values():获取所有值的集合
Collection aCollection=a1.values();
4.8 Set entrySet():获取所有键值对的集合
a1.entrySet();
Entry:键值对
提供方法
K getKey():获取该键值对的键
V getValue():获取该键值对的值
V setValue(V value):给该键值对修改值
Iterator<Entry<Integer, String>> iterator = set.iterator();//获得键值对
//搞个迭代器
while(iterator.hasNext()) {//看下一个是否为空
Entry<Integer, String> entry = iterator.next();
//获取该entry中key的值
Integer key = entry.getKey();
//获取该entry中value的值
String value = entry.getValue();
System.out.println(key+"------"+value);
}
Set<Entry<Integer,String>> set = a1.entrySet();//获得所有键值对
for (Entry<Integer, String> entry : set) {//获取每一对键值对
Integer keyInteger=entry.getKey();//获得键
String vaString=entry.getValue();//获得值
System.out.println(keyInteger+"---"+vaString);
}
System.out.println();
Iterator<Entry<Integer, String>> iterator = set.iterator();//获得所有键值对
//搞个迭代器
while(iterator.hasNext()) {//看下一个是否为空
Entry<Integer, String> entry = iterator.next();//键值对提供的方法
//获取该entry中key的值
Integer key = entry.getKey();
//获取该entry中value的值
String value = entry.getValue();
System.out.println(key+"------"+value);
}
System.out.println();
Set<Integer> keySet = a1.keySet();//键值的所有集合
for (Integer key : keySet) {
String value = a1.get(key);
System.out.println(key+"----"+value);//keyset
}
System.out.println();
Iterator<Integer> iter=a1.keySet().iterator();//搞个键值的所有集合,搞出除它的迭代器
while (iter.hasNext()) {
Integer keyInteger=iter.next();//遍历键值
String valiuString=a1.get(keyInteger);//通过键找值
System.out.println(keyInteger+"---"+valiuString);
}
Properties
特点:可将字典中数据存储在文件中,可以读取指定类型文件的数据到字典中
特有的方法:
void store(OutputStream out, String comments)
作用:将字典中的数据存储到文件中
参数:
out:输出流,表示数据的存储位置
comments:提交信息
void load(InputStream inStream)
作用:加载文件,时文件中的数据倒入到字典中
参数:inStream:输入流,表示读取的文件地址
String getProperty(String key)
作用:通过key获取字典中存储对应的value,类似与Map的get方法
优点:
getProperty返回值是String类型的,get方法返回值是Key的泛型,而Properties并没有定义
泛型,所以返回值为Object类型,需要手动转换为String
String getProperty(String key, String defaultValue)
作用:通过key获取对应value
参数:key:键 defaultValue:默认值
如果取值时,字典中不存在该key,则返回默认值.如果存在该key,那么返回key对应的value
异常
异常分类
Throwable:所有错误的顶级接口
Error:错误
原因:因为硬件问题引起软件崩溃
OutOfMemoryError:内存溢出异常,程序员可以通过对内存的优化,解决该问题.这个错误简称为OOM
Exception:异常
CheckedException:检查时异常
原因:代码未按照规定语法编写
RuntimeException:运行时异常
原因:写的逻辑有问题
异常会传递,出现异常后程序闪退,不会再继续向下执行
常见异常:
空指针异常:NullPointerException
原因:使用null调用了属性或方法
数组下标越界异常:IndexOutOfBoundsException
原因:操作的下标不在集合下标的取值范围内
算法异常:ArithmeticException
原因:代码中的数学运算不符合数学规律,比如被除数为0
类型转换异常:ClassCastException
原因:转换的对象并不是目标对象所属的类
数字格式异常:NumberFormatException
类不存在异常:ClassNotFoundException
异常处理:
1.修改代码
2,try catch
语法:
try{
有可能导致异常的代码
}catch(异常种类1 变量名){
//当try中的代码产生异常种类1的异常时,会执行此处代码
}catch(异常种类2 变量名){
//当try中的代码产生异常种类2的异常时,会执行此处代码
}...
finally {
必须要执行的代码
}
注意:
1,try中的代码不要写太多
2,finally可有可无
3,当有多个catch时,有继承关系先写子类异常,在写父类异常.没有继承关系顺序无所谓
3,声明异常与抛出异常
throws:声明异常
使用语法:
访问权限修饰符 修饰符 方法名(形参列表) throws 异常类1,异常类2...{
}
throw:抛出异常
使用语法:
自定义异常
1,throws与throw的区别?
throws:声明异常,在方法定义时使用throw:抛出异常,在方法体中使用
2,finally,final,finalize的区别?
finally:配合try catch使用,表示必须执行的代码
final:不可变的,可以修饰类,属性,方法,变量
finalize:Object类提供的方法,当对象被销毁时,由系统调用