throws和throw的区别
throws:
- 用在方法声明后,跟的是异常类名
- 表示抛出异常,由该方法的调用者来处理
- 表示出现异常的一种可能性,并不一定会出现异常
throw:
- 用在方法体内,跟的是异常对象名
- 表示抛出异常,由方法体内的语句处理
- 执行throw一定是抛出了某种异常
集合体系结构
集合类:提供一种存储空间可变的存储模型,存储的数据容量可以随时改变
集合的整个结构
Collection
创建:
//创建集合对象,里面的元素是String类型的
Collection<String> c = new ArrayList<>();
//添加元素 boolean add(E e)
c.add("hello");
c.add("world");
System.out.println(c);
几种基本方法:
Collection<String> c = new ArrayList<>();
c.add("hello");
c.add("world");//在集合中添加元素
System.out.println(c);
c.remove("world");//移除集合中的某个元素
System.out.println(c);
c.clear();//清空集合中的元素
System.out.println(c);
System.out.println(c.contains("hello"));//判断集合中是否存在该元素
System.out.println(c.isEmpty());//判断集合是否为空
System.out.println(c.size());//集合的长度,也就是集合中元素的个数
iterator :迭代器 集合的专用遍历方式
使用迭代器遍历不能修改集合元素否则会导致并发修改异常。
List集合:
-
有序集合,用户可以精准控制列表中每个元素插入的位置。用户可以通过整数索引访问元素。
-
与Set集合不同,列表通常允许重复的元素。
-
有序:存储和取出元素顺序一致。
-
可重复:存储的元素可以重复。
List<String> list = new ArrayList<String>();
list.add(1,"good");//在此集合中的指定位置插入指定的元素
list.remove(2); //删除指定索引处的元素,返回被删除的元素
list.set(0,"new");//修改指定索引处的元素,返回被修改的元素
System.out.println(list.get(1));//返回指定索引处的元素
ListIterator:列表迭代器
- 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
- 用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表并获取列表中迭代器当前的位置。
ListInterator中的常用方法:
- E next():返回迭代中的下一个元素
- boolean hasNext():如果迭代具有更多元素,返回true。
- E previous():返回列表中的上一个元素。
- boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回True。
- void add(E e):将指定的元素插入列表。
List集合子类:
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删块
代码尽量依赖于抽象,不依赖于具体,这样代码可以方便替换,可以快速转变为LinkedList之类的
//创建集合对象
LinkedList<String> linkedList = new LinkedList<>();
//通过当前类为引用类型,ArrayList 实现了List接口,除了要必须实现 接口List中声明的方法外,还可以实现额外的一些方法
ArrayList<String> list = new ArrayList<>();
//通接口为引用类型,ArrayList 实现了List接口
List<String> list1 = new ArrayList<>();
linkedList.add("hello");
linkedList.add("world");
linkedList.add("java");
linkedList.addFirst("javase");//在链表开头插入指定元素
linkedList.addLast("javaee");//在链表结尾插入指定元素
String s1 = linkedList.getFirst(); //返回第一个元素
System.out.println(s1);
Set集合
- 不包含重复元素的集合
- 没有带索引的方法,不能使用普通的for循环遍历
哈希值
- JDK根据对象的地址或者字符串或者数字计算出来的int类型的数值。
默认情况下不同对象的哈希值是不同的,通过方法重写可以实现不同对象的哈希值相同。
Student s1 = new Student("马小跳", 15);
//同一个对象多次调用返回的哈希值是相同的
System.out.println(s1.hashCode());
System.out.println(s1.hashCode());
HashSet
- 对集合的迭代顺序不做保证,不保证存储和取出的元素顺序一致
- 底层数据机构是哈希表
- 没有带索引的方法,不能使用普通for循环遍历
- 由于是Set集合,所以是不包含重复元素的集合