2022-8-6 第一小组 甘源册 学习笔记

知识点掌握情况

List集合(理解) Set集合(了解) 比较接口(了解)Map接口(理解)

集合的遍历(了解)并发问题(了解)

学习心情

今天的学习的知识点掌握起来很轻松,没什么难点,很不错

1.List集合

  • ArrayList:内部结构是数组
  • 数据是有顺序(添加的先后顺序)的,数据可以重复
  • 比较适合做高频率的查找,遍历。

1.1 LinkedList集合

  • 双向链表
  • 比较适合做高频率的新增和删除

2.Set集合

  • Set其实是有顺序的,内部有一个专门的排序算法
    • 无序不等于随机。
    • 无序是指没有按照添加的先后顺序,其实内部是做了排序的。
  • Set集合如何确保数据不重复
    • 保证数据类型的类要重写hashCode和equals方法。
  • LinkedHashSet:在添加数据的同时维护数据的先后顺序。
    • 操作数据的效率率低于HashSet

2.1 TreeSet集合

  • 默认排序
    • Integer:从大到小排序
    • String:ASCI码排序
    • 排序规则——你要排序的对象的类必须实现Comparable接口

3.比较接口

  • Comparable:自然排序,排序规则是固定的

  • Comparator:临时排序

    •         ArrayList<Person> people = new ArrayList<>();
              people.add(new Person("大神",12222));
              people.add(new Person("三大",122));
              people.add(new Person("方式",1222));
              people.sort((o1,o2)->{
                  if (o1.getId()<o2.getId()){
                      return -1;
                  }
                  if (o1.getId().equals(o2.getId())){
                      return 0;
                  }
                  return 1;
              });
      // 结果: [Person{name='三大', id=122}, Person{name='方式', id=1222}, Person{name='大神', id=12222}]
      
      

4.Map接口

  • 存储对值的K-V;key-value
  • key不能重复,value是可以重复的
  • 没有添加的先后顺序

4.1 HashMap

  • 内部存储结构:
    • JDK1.7之前:链表+二叉树
    • JDK1.8及之后:链表+数组+红黑树
    • HashMap面试上90%会问你原理
  • LinkedHashMap
    • 双向链表

4.2 Properties

  • 属性
  • Hashtable的子类,更多的是用来操作properties文件

5.集合的遍历

5.1List集合的遍历

  • for循环

    • for (int i = 0; i < list.size(); i++) {
          
      }
      
  • 增强for循环

    • for (String s : list) {
      
      }
      
  • 迭代器

    • // 生成Iterator类型的对象
      Iterator<String> iterator = list.iterator();
      while (iterator.hasNext()) {
          String next = iterator.next();
          System.out.println(next);
      }
      
  • // list删除元素的问题解决办法:
    // 1.指针回调
    // 2.逆序删除
    // 3.使用迭代器----推荐
    

5.2Set集合的遍历

  • 增强for循环

    •         for (String s : set) {
                  System.out.println(s);
              }
      
  • 迭代器

    • Iterator<String> iterator = list.iterator();
      while (iterator.hasNext()) {
          System.out.println(iterator.next());
      }
      

5.3Map集合的遍历

  • 增强for

    1. // 先遍历key,根据key拿value
      Set<String> strings = map.keySet();
      for (String string : strings) {
          System.out.println(string+"->"+map.get(string));
      }
      
    2. // 用entrySet方法---增强for循环
      Set<Map.Entry<String, String>> entries = map.entrySet();
      for (Map.Entry<String, String> entry : entries) {
          // getKey 拿key   getValue 拿value
          System.out.println(entry.getKey()+entry.getValue());
      }
      
  • 迭代器

    •         Set<Map.Entry<String, String>> entries = map.entrySet();
              Iterator<Map.Entry<String, String>> iterator = entries.iterator();
              while (iterator.hasNext()) {
                  Map.Entry<String, String> next = iterator.next();
                  System.out.println(next.getKey()+"+"+next.getValue());
              }
      
  • 其他的集合

    • LinkedHashMap:在HashMap的基础上维护了一个双链表。

6.线程安全问题

  • 迭代器是依赖于集合而存在的,在判断成功以后,集合中新增了元素,迭代器不知道,所以报错
  • 解决
    • 迭代器遍历元素,迭代器删除元素
    • 普通for循环,集合删除

总结

  • 集合需要掌握:
    • 如何创建需要的集合。——多态
    • 主要用到的是List和Map
    • 各种区别?——必须知道
    • 各种集合方法(API)的调用
    • 两个比较接口
    • 各种集合的特点【从接口到实现类层面】——必须知道
    • 重点集合的内部结构——【ArrayList,HashSet,HashMap(两个)
    • 各种集合的遍历
    • 线程并发问题——面试题
  • 最重要的集合
    • ArrayList
      • 方法:add,remove,get
    • HashMap
      • 方法,put

面试题:

  1. Collection和map接口的区别
  2. ArrayList和LinkedList的区别
    • ArrayList内部结构是数组
    • LinkedList内部结构是双向链表
  3. ArrayList和Vector的区别
    • 和ArrayList几乎一模一样
    • ArrayList是线程异步,线程不安全
    • Vector是线程同步的,线程是安全
  4. List和Set的区别
    1. List:有顺序,元素可以重复,顺序指的是添加的先后顺序
    2. Set,没有顺序,元素不可以重复,顺序指的是添加的先后顺序
  5. HashSet与LinkedHashSet的区别和联系
    • 联系:LinkedHashSet是HashSet的子类
    • 区别:LinkedHashSet有添加顺序;HashSet没有添加顺序
  6. HashMap与Hashtable的区别
    • 几乎一模一样
    • HashMap:是线程异步,线程不安全;Hashtable:是线程同步,线程安全
    • HashMap的key【键】可以为空,Hashtable的key【键】是不可以为空

posted @ 2022-08-06 20:33  (≧∇≦)(≧∇≦)(≧∇≦)  阅读(51)  评论(0)    收藏  举报