集合的概念
存储一组数据类型相同的引用数据类型的数据
1,只能存储引用数据类型,不能直接存储基本数据类型。但可以使用对应的包装类将基本数据类型包装成对象,然后将对象添加到集合中。这样可以实现在集合中存储基本数据类型的值。
2,长度可变
Collection
集合体系
List:有序的,有下标的,元素可重复
Set:无序的,无下标的,元素不可重复
List:
Collection接口的子接口,表示有序的列表集合。List接口的实现类有ArrayList、LinkedList和Vector等。
ArrayList:
List接口的一个常用的实现类。它基于数组结构实现,JDK 1.2版本引入。ArrayList是线程不安全的,在多线程环境下需要进行额外的同步处理。
优点是查询效率高,
缺点是增删元素的效率相对较低。
Vector:
也是List接口的一个实现类,使用了和ArrayList类似的基于数组的结构。与ArrayList不同的是,Vector是线程安全的,
优点:查询效率高
缺点:增删效率慢
LinkedList:
是List接口的另一个实现类,基于链表结构
优点:增删效率高
缺点:查询效率低
Set:
Set是Collection接口的另一个子接口,表示无序的集合,不允许包含重复元素。Set接口的实现类有HashSet、LinkedHashSet和TreeSet等。
HashSet:
Set接口的一个常用实现类,它基于哈希表实现。它可以快速地进行插入、删除和查找操作,并且不保证元素的顺序。
LinkedHashSet
是HashSet的一个子类,具有HashSet的所有特性,并且维护了元素的插入顺序。因此,遍历LinkedHashSet时会按照插入顺序输出元素。
TreeSet
是Set接口的另一个实现类,它基于红黑树(一种自平衡二叉搜索树)实现。TreeSet中的元素是有序的,并且支持快速的插入、删除和查找操作。
Collection提供的方法
boolean add(E e);
作用:添加
参数:
e:本次添加的数据
返回值:
是否添加成功
boolean addAll(Collection<? extends E> c);
作用:添加一个集合的数据
参数:
e:添加的集合
返回值:
是否添加成功
void clear();
作用:清空boolean remove(Object o);
作用:删除一个数据
参数:
o:被删除的数据
返回值:
是否删除成功
boolean removeAll(Collection<?> c);
作用:删除一组数据
参数:
c:删除的数据集合
返回值:
是否删除成功
注意:
当集合中有多个相同的数据,同时都会被删除
boolean contains(Object o);
作用:判断指定的元素在集合中是否存在
参数:
o:指定的元素
返回值:
是否存在boolean containsAll(Collection<?> c);
作用:判断指定的集合中的元素在集合中是否全部存在
参数
c:指定的集合
返回值:
是否全部存在
boolean isEmpty();
作用:判断集合是否为空集合
返回值:
true表示空集合,false表示非空
空集合:集合中没有元素
集合为空:没有创建,Collection c = null;int size();
作用:获取集合的长度
返回值:
集合的长度
Iterator<E> iterator();
作用:获取迭代器
返回值
迭代器
Iterator提供的方法
boolean hasNext();
作用:判断下一个是否有值
返回值:true,有值,false,没值
E next();
作用:移动游标,并获取其指向的值
返回值:获取到的数据
Object[] toArray();
作用:将集合转换为数组
返回值:
转换后的数组
List提供的方法
void add(int index, E element);
作用:
在指定位置添加数据
参数:
index:指定的位置
element:添加的数据boolean addAll(int index, Collection<? extends E> c);
作用:
给指定的位置添加一个集合的数据
参数:
index:指定的位置
c:添加的集合
返回值:
是否添加成功E remove(int index);
作用:
删除指定位置的元素
参数:
index:指定的位置
E set(int index, E element);
作用:
修改指定位置的元素
参数:
index:下标
element:修改后的元素
返回值:
修改前的元素
E get(int index);
作用:
获取集合中指定位置的元素
参数:
指定的位置
返回值:
该位置上的元素
int indexOf(Object o);
作用:
获取指定元素在集合中第一次出现的位置
参数:
o:指定的元素
返回值:
元素在集合中第一次出现的位置
如果返回值为-1表示数据不存在int lastIndexOf(Object o);
作用:
获取指定元素在集合中最后一次出现的位置
参数:
o:指定的元素
返回值:
元素在集合中最后一次出现的位置
如果返回值为-1表示数据不存在List<E> subList(int fromIndex, int toIndex);
作用:
截取
参数:
fromIndex:开始位置,包含
toIndex:结束位置,不包含
返回值:
截取到的元素集合
Map
字典
以键值对应的方式存储一组数据类型相同的引用数据类型的数据
键:key
值:value
注意:一个键对应只一个值,所以键不能重复
HashMap
特点:JDK1.2,线程不安全,允许空键空值
如何判断键是否重复
1,先使用存储的键值对的键的hashcode值与已经在字典中的其他键的hashcode进行比较
2,如果hashcode值不相同,直接存储,如果hashcode与字典中其他键值对的键的hashcode值相同,那么在使用equals方法进行比较
3,如果equals不相同,认为不相同,直接存储,如果equals方法相同,则认为相同
HashTable
特点:JDK1.0,线程安全,不允许null做为键或值
如何判断键是否重复
1,先使用存储的键值对的键的hashcode值与已经在字典中的其他键的hashcode进行比较
2,如果hashcode值不相同,直接存储,如果hashcode与字典中其他键值对的键的hashcode值相同,那么在使用equals方法进行比较
3,如果equals不相同,认为不相同,直接存储,如果equals方法相同,则认为相同
TreeMap
特点:key要么拥有比较性,要么创建TreeMap指定key的比较器
Properties
Map提供的方法
增
V put(K key, V value);
作用:给字典中添加一个键值对
void putAll(Map<? extends K, ? extends V> m);
删
boolean remove(Object key)
boolean remove(Object key, Object value)
void clear();
改
V put(K key, V value);
作用:当字典中存在该key时,就是修改
返回值:修改前键对应的值
查
int size();
作用:查询字典中键值对的个数
boolean isEmpty();返回HashMap是否为空,如果HashMap中没有任何元素,则返回true。
boolean containsKey(Object key);判断HashMap中是否包含指定键,如果包含则返回true,否则返回false。
boolean containsValue(Object value);判断HashMap中是否包含指定值,如果包含则返回true,否则返回false。
Set<Map.Entry<K, V>> entrySet();
作用:将字典转换为set集合,set中的一个元素就是一个键值对(Entry)
Entry类提供的方法
getKey
getValue
setValue(V value);
Set<K> keySet();
作用:将字典中的键以set形式输出
Collection<V> values();
作用:将字典中的值以Collection形式输出
V get(Object key);
作用:通过key获取value
参数:key:键
返回值:对应的value
Collections
作用:集合操作工具类型
常用方法
public static <T> boolean addAll(Collection<? super T> c, T... elements)
public static <T extends Comparable<? super T>> void sort(List<T> list)
public static void reverse(List<?> list)
异常
异常的概念
因为硬件或编写程序考虑不足,导致的程序闪退,称为异常
异常的分类
Throwable
Error(错误)
出现的原因:因为硬件问题导致的程序产生了异常
处理方案:不管
Exception(异常)
RuntimeException:运行时异常
出现的原因:因为程序员编写代码时考虑不足,引起的
处理方案:通过代码使程序可以正常结束
CheckedException:检查时异常
出现的引用:因编写代码时语法不符合规范,导致的
处理方案:按照语法规范编写代码
异常的产生
可以是由于程序错误、资源不足、非法操作等引起的。当发生异常时,程序会抛出对应的异常对象,通常包含了异常的类型、原因和堆栈信息。
异常的传递
在A调用调用B,B中调用C,....C中出现了异常会导致A也出现异常,如果中途没有处理,那么将会把异常传递给JVM,JVM对异常的处理方案就是让程序闪退
常见的异常
OutOfMemoryError
内存溢出错误,可以通过代码进行优化改进
InputMismatchException
输出异常
ArithmeticException
算法异常
ArrayIndexOutOfBoundsException
数组下标越界异常
NullPointerException
空指针异常
调用属性或方法的对象为null
异常的处理
方案一:try-catch-finally
try{
可能会存在异常的代码
}catch(异常类型1 变量名1){
异常类型1的异常处理的代码
}catch(异常类型2 变量名2){
异常类型2的异常处理的代码
}
...
catch(异常类型n 变量名3){
异常类型n的异常处理的代码
}finally{
必须要执行的代码,可有可无
}
方案二:异常声明throws
访问权限修饰符 修饰符 返回值类型 方法名(形参列表) throws 异常类型1,异常类型2,...{
}
方案三:抛出异常
throw 异常对象;
自定义异常
步骤
1,创建一个类
2,使其继承与Exception或Exception子类
3,重写构造函数调用父类构造函数
有参构造函数中的参数是异常信息
使用
使用throw抛出自定义异常的对象
列:
// 自定义异常类
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}// 使用自定义异常
public class Main {
public static void main(String[] args) {
try {
// 抛出自定义异常
throw new CustomException("This is a custom exception.");
} catch (CustomException e) {
// 捕获并处理自定义异常
System.out.println("Caught custom exception: " + e.getMessage());
}
}
}