讲师笔记,Java基础学习之路之day18——List接口实现类

List接口的实现类:ArrayList LinkedList Vector Stack    
 
     ArrayList 和 Vector 的异同:
         相同:底层都是利用数组的原理来实现
         不同:
             ArrayList线程不安全,效率更高
             Vector线程安全
     
     Stack 先进后出
     
     LinkedList
         数据结构是双向链表
     ArrayList 和     LinkedList的区别:
         数据结构:
             ArrayList是采用线性表实现的
             LinkedList是采用链表实现的
         操纵性能:
             ArrayList适合做查询功能,性能更优
             LinkedList做插入和删除的操作性能更优
     
     ------------------------------------------------
     
     Set接口的实现类   :HashSet TreeSet
     
         set的遍历方式:
             1. 在jdk1.5之后出现了一种for循环,增强for 或者 foreach
             
                 for(你要遍历的集合或者数组类型   a:要遍历的数组或者集合){
                     //a表示每次遍历的元素
                 }
                 
                 当类实现了Iterable接口的时候,可以使用foreach循环进行遍历
                 interface Iterable<T>{
                     Iterator<T> iterator();
                 }
                 如果能用iterator()进行遍历,一定能用foreach进行遍历
                 
             2. iterator迭代器的作用:对集合进行遍历
             
                 常用方法:
                     next(): 返回当前位置的元素并将指针移动到下一个元素
                     hasNext():判断当前位置是否有元素
                     remove():删除迭代器返回的最后一个元素
                 
                 注意:
                 如果使用iterator在迭代过程中,一次循环中只能删除一个元素
                要删除元素 ,必须使用iterator的remove方法 不能使用集合的remove方法
                否则会报错:ConcurrentModificationException
            
            
            HashSet
                对应的数据结构是哈希散列表
                
                equals()   hashCode()          结果
                true         true        f1和f2认为是重复元素
                true         false        f1和f2不重复
                false         true        f1和f2不重复
                false         false        f1和f2不重复
                
                如何判断元素重复的流程:
                    1. 通过调用待添加对象的hashCode方法 得到hash值
                    2. 通过hash值 经过算法 得到待添加对象在hash表中的位置
                    3. 如果当前位置没有元素,立即放入
                    4. 如果当前位置有元素,调用待添加对象的equals或者==(和当前位置的已有元素进行比较)
                    5. equals或者== 结果为true 当前待添加对象被舍去
                    6. equals或者== 结果为false,将当前待添加对象追加到当前位置 以链表的形式
                
                使用HashSet<T> 需要重写T的hashCode和equals方法
                
            -------------------------------------------
            
            作业:
                用HashSet实现用户管理系统,改写dao层
                    重写hashCode :根据id生成hash值
                    重写equals:根据id是否相同 来判断是否为同一对象

猜你喜欢

转载自blog.csdn.net/u011189148/article/details/81417156