8.11笔记

复习{
  泛型: 数据类型参数化 
   语法: 接口<A-Z> ,类<A-Z>

     作用:省略强制转换
              在编译期间验证容器中数据类型是否匹配
   
   List<Person> p = new ArrayList<>();
  
  1.List接口的
         ArrayList , Vector实现类的区别
              Vector是线程安全的, 性能慢
              ArrayList是线程不安全的, 性能快  
        底层实现都是用 对象数组完成的
           
           Stack栈: LIFO
                push(); 压栈
                pop(); 查看并删除
                peek(); 查看不删除
                search(); 查看并返回栈的位置 , 栈顶的位置是1
                
                推箱子, 象棋悔棋, 子弹入膛
        
数据结构中: 
 1.线性表:     数组,队列(单向,双向),链表(单向,双向,双向循环链表), 栈
       
 Queue: 单向队列  FIFO 
      |-- LinkedList:   6
               三个有异常的
                    add
                    element
                    remove
               
               三个返回特殊值的
                offer
                poll
                peek
                   
      Deque: 双向队列   
           |-- LinkedList: 
                   push();  压栈
                   pop(); 删除
                  getFirst();
                  getLast();
                  offerFirst();
                  offerLast();

 Set: 接口的特点   无序 不可以重复 , 允许存储一个null 
     |-- HashSet:
               存储原理: HashSet底层是用HashMap实现的,HashMap哈希表(散列表)
                     所以重点了解HashMap是如何存储数据的
                 
                 向HashSet中存储数据时,一定会经历两步,
                 1.计算出当前元素在hash表中的位置,hash值 (散列值)
                 2.如果当前hash对应的位置上 没有 数据,那么就直接存储
                 如果有数据,就调用两个对象的equals方法,如果相等
                 就舍去,如果不相等就以链表的形式存储    
                     
                 key-value  双值存储 , 一出现就是一对儿    
     
               set.add(5); 实际上就是将当前的数据当作了map集合的key值
                               value 值 是 Object obj = new Object(); 
                               的填充,为了满足语法结构
     
     java中的循环种类?
          1.while 
          2.do while
          3.for
          4.iterator
          5.foreach
          
          在HashSet存储自定义对象时 必须 重写hashCode 和equals方法
          
================================================================================     
|-- TreeSet: 
      有序的Set集合,所谓的有序 就可以根据自己需求进行排序
      
      TreeSet底层实现 是 TreeMap,TreeSet 又实现了SortedSet接口
      SortedSet 底层是用 自然排序 和 Compartor的 比较器进行排序的
           
      TreeMap 是红黑树结构存储     
           
     构造器: 
        TreeSet(); 用的是自然排序
        TreeSet(Comparator<? super E> comparator); 用的是自定义比较器排序
         
      方法: add()  添加数据
             clear(); 清除
             remove(Object obj); 删除
             isEmpty(); 判断是否是 空字符集
           contains(Object o)  判断是否包含
            iterator(); 数据遍历

 如果向TreeSet添加元素 必须重写Comparable接口 ,并重写
 compareTo方法, 入参是容器中别的对象
  
  TreeSet存储数据时 是用自己的 排序算法实现的,不是用计算
  hash值的位置来存储的

 在排序中, 如果 年龄相等, 就 按分数排序

-------------------------------------------------------------
第二种实现比较排序的方式  , 实现Comparator接口
     Comparable: 自然排序, TreeSet构造器默认的
              需要重写compareTo(Object obj)方法
              会污染当前需要排序的类,比较规则单一
              TreeSet();
              
     Comparator: 自定义比较器
             相比Comparable更加灵活,可以拓展多个比较规则
             重写compare(Object obj1,Object obj2);
             不会污染需要排序的类,需要用到
             TreeSet(Comparator c);构造器     

         1.写法 编写多个java类 实现Comparator 接口
               可以按照自己的规则 编写比较规则
         2.使用创建匿名内部类的形式向TreeSet中添加自定义对象
              Set<Person> set1 = new TreeSet<>(new Comparator<Person>() {
                @Override
                public int compare(Person o1, Person o2) {
                    return o1.age - o2.age;
                }
             });    
===================================================================================
Collections: 用来操作List,Set较多 集合的 工具类
     仅有 静态方法组成、
     reverse(List<?> list);  将集合反转输出
      shuffle(List<?> list); 打乱顺序输出
      sort(List list);  给指定的集合排序 --->  是 使用 快排 完成的
      swap(List<?> list, int i, int j);指定集合的某个的值交换
      
Arrays: 工具类 , 应该在java常用类中讲
   Arrays操作 数组的
        
        asList(); 将数组添加到 集合中包裹
        sort(); 将数组进行排序

   


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值