8.7笔记

复习{
 try...catch...finally块儿:
      try{
      
      }catch(){
           捕获异常
      }     
           
      try{
         有异常 并且 需要关闭资源的时候
      }catch(){
      
      }finally{
      
      }
      
      try{
         专门用来关闭资源的
      }finally{
      
      }     
           
      finally特点:  正常情况下 finally块儿都会执行
                       但是特殊情况下 ,不会执行 1.在try块儿之前就出现了异常
                                                     2.在try块儿中执行了System.exit(0); 方法     

    try...catch(){}...finally块儿中 添加return 关键字   
    
    finally如果添加了return 关键字 那么会出现什么情况?
         1.覆盖方法的返回值
         2.异常丢失
    
    return关键字可以有两种用法?
        1.用于方法的返回值
        2.结束方法的执行                                                        
            
 自定义异常:
      目的: 在java提供的异常体系中,不能满足我们的需求了,我们就继承Exception, RuntimeException
              拓展自己的异常类型
     
      public class MyException extends Exception{
             可选 重写  getMessage方法  和 printStackTrace() 方法,可以补充些,使用父类的;
      }
     
     new Exception("自己的异常信息");
          
 集合框架:   
   介绍了集合框架出现的原因: 因为java中提供的容器啊,有局限性
    比如数组,数组的特点有些限定, 例如数组长度确定不能改变,数组只能存储相同数据类型
              数组必须通过下标来获取元素,所以拓展了另一个容器就是 集合框架
   
    我们学的第一个集合框架就是 对数组进行了封装; Object[]  
    
  java中的循环一共有几种?  
       1.do...while();   2.while(){}  , 3.for 
       4.迭代器               5. foreach 增强for循环
                
 集合框架的体系: 
     Iterable: 接口 , 作用是 用于 迭代器        
           方法: iterator();   
                  
        Collection:是所有单值存储集合的 顶级接口
             add(); 向集合中添加元素
             clear();  清除集合
             contains(); 判断是否包含指定对象
             equals();  比较两个对象是否相等
             size(); 返回当前集合中的元素个数
             isEmpty(); 判断集合是否为 空
             remove(Object obj);根据对象删除
             toArray(); 将一个集合 变成对象数组
             
             |-- List:
                      add(int index,Object obj);
                      indexOf(); 
                     lastIndexOf();
                     get(int index); 根据指定下标 获取元素
                     remove(int i); 根据下标删除元素
                     remove(Object obj); 根据对象删除元素
                     set(int index,Object value); 将指定位置的元素 ,替换
                     subList(int fromIndex,int endIndex); 截取集合中的元素
                     toArray(); 将集合框架变成数组

             |-- Set:
             |-- Queue: 
                      |-- Deque: 
    
        Map: 双值   key-value
------------------------------------------------------------------------------------------        L
List接口的第一个实现类: 
     ArrayList: 实现方式  是 底层封装了一个 Object[] 数组    
                 适合查询操作, 不太适合 删除 ,添加操作
                 
         学会使用ArrayList添加 String.....  添加自定义对象
     
    源码分析: 
         private static final int DEFAULT_CAPACITY = 10; 默认的对象数组大小为10
    
        Object[] obj = new Object[0]; 动态初始化
              obj[0] = 4;
              
              System.out.println(obj[0]);
              
        Object[] obj = {}; 静态初始化
            
             private int size; 有效的元素个数
                  
                 
                 new ArrayList(); 无参默认 10 
                 new ArrayList(int capacity); 默认初始化大小的
                             
     
     LinkedList: ,不是用 数组实现的 ,是用双向链表实现的;
               每次我们向LinkedList添加元素的时候,都会将元素包装成 Node节点

          void linkLast(E e) { 
            final Node<E> l = last; //假设 这个容器中没有元素 ,你告诉我 last 是谁?
            final Node<E> newNode = new Node<>(l, e, null);
            last = newNode;     //我们把 新的数字 7 当成  整个链表的 最后一个节点
            if (l == null)
                first = newNode; //如果最后一个节点 是null ,那么新节点 就是第一个节点
                                      也是最后一个节点     
            else
                l.next = newNode; //如果 之前链表中有元素,那么新建的 节点就是 之前节点的
                                         下一个节点
            size++;     //有效个数 + 1
            modCount++; //操作 次数 + 1
        }
          
    方法: 
         add(E e);
         add(int index, E element);
         addFirst(E e);
         addLast(E e); 
         clear();
         contains(Object o);
         get(int index);
         getFirst();
         getLast();
         indexOf(Object o);
         lastIndexOf(Object o);     
         remove(Object o);
         remove(int index);
          size();
          toArray();
       
     讲解 get方法:         位运算 
         public Node<E> node(int index) {     7
                   7      <  3
            if (index < (size >> 1)) {size 是 10   向右移动一位 是 /2的意思  5
                Node<E> x = first;
                for (int i = 0; i < index; i++)
                    x = x.next;
                return x;
            } else {
                Node<E> x = last; //last代表链表的最后一个元素
                for (int i = 10 - 1; i > index; i--)
                    x = x.prev;
                return x;
            }
        }
                                       1 2 3 4 5 6 7 8 9 10
     
    LinkedList在查询数据时, 没有下标,只能 将 总长度 /2 ,判断
    一下 你要找的整个下标 在 前半段, 还实在 后半段,如果在前半段
    那就从头找, 如果在后半段,那就从后找
     
     ArrayList 和 LinkedList的区别: 
              ArrayList有下标,能快速锁定值的所在位置,但是 LinkedList
              没下标,所以查询速度慢, 以后查询操作频繁 要使用ArrayList,不要使用LinkedList
              
              如果插入,和 删除频繁 使用LinkedList 性能快,它不用移动;
              修改指针 指向就可以了,ArrayList有下标,删除,插入,就会移动很多数 
                   就耗时
                   
     插入,删除多,那就用LinkedList
     查询多 , ArrayList
     
     
     Vector: 
        |-- Stack:  
          
 1.学会如何使用ArrayList
 2.将一个List集合 ,倒叙 输出
 3.了解ArrayList 底层代码原理, 尽量写出动态数组的工具
 
 
 
 
 
 
 两个层次: ArrayList ---> 单链表, ----> 双向链表
  1.会用
  2.会用 ,懂源码
  3.会用,懂源码, 自己能写源码
  
 
 
 
 
 
 
 
 
 
 
 


}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值