JAVA学习笔记5(重写)

157 阅读2分钟

集合

1、集合概述

微信截图_20221003161803.png

微信截图_20221003161909.png

微信截图_20221003161922.png

微信截图_20221003170850.png

2、Collection接口

(1)Collection接口常用方法补充:

retrainAll()求交集 hashCode()返回当前对象的哈希值

微信截图_20221003211637.png

微信截图_20221003211801.png

记得重写equals()

(2)集合元素中的遍历操作

使用迭代器Iterator接口(主要方法就是hasNext()和next())

微信截图_20221003212225.png

微信截图_20221003212414.png

微信截图_20221003213953.png

(3)for循环新用法

微信截图_20221003214726.png

3、List接口

(1)概述

微信截图_20221003215144.png

(2)源码分析

ArrayList的源码分析:

  • jdk 7情况下
  •  ArrayList list = new ArrayList();//底层创建了长度是10的Object[]数组elementData
    
  •  list.add(123);//elementData[0] = new Integer(123);
    
  •  ...
    
  •  list.add(11);//如果此次的添加导致底层elementData数组容量不够,则扩容。
    
  •  默认情况下,扩容为原来的容量的1.5倍,同时需要将原有数组中的数据复制到新的数组中。
    
  • 结论:建议开发中使用带参的构造器:ArrayList list = new ArrayList(int capacity)
  • jdk 8中ArrayList的变化:
  •  ArrayList list = new ArrayList();//底层Object[] elementData初始化为{}.并没有创建长度为10的数组
    
  •  list.add(123);//第一次调用add()时,底层才创建了长度10的数组,并将数据123添加到elementData[0]
    
  •  ...
    
  •  后续的添加和扩容操作与jdk 7 无异。
    

小结:jdk7中的ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,延迟了数组的创建,节省内存。

LinkedList的源码分析:

  •  LinkedList list = new LinkedList(); 内部声明了Node类型的firstlast属性,默认值为null
    
  •  list.add(123);//将123封装到Node中,创建了Node对象。
    
  •  其中,Node定义为:体现了LinkedList的双向链表的说法
    
  •  private static class Node<E> {
          E item;
          Node<E> next;
          Node<E> prev;
    
          Node(Node<E> prev, E element, Node<E> next) {
          this.item = element;
          this.next = next;
          this.prev = prev;
          }
      }
    

Vector的源码分析:

  •  jdk7和jdk8中通过Vector()构造器创建对象时,底层都创建了长度为10的数组。
    
  •  在扩容方面,默认扩容为原来的数组长度的2倍。
    

(3)常用方法

微信截图_20221003221516.png

微信截图_20221003221856.png

4、set接口

(1)概述

微信截图_20221003223622.png

(2)理解无序性和和不可重复性

微信截图_20221003224447.png

(3)添加元素过程

微信截图_20221003224453.png

(4)linkedHashSet

微信截图_20221003233057.png

(5)TreeSet

微信截图_20221003233216.png

5、Map接口

微信截图_20221004000201.png

微信截图_20221004000208.png

微信截图_20221004000221.png

微信截图_20221004000235.png

微信截图_20221004000241.png

微信截图_20221004112939.png

6、Collections工具类

微信截图_20221004113018.png

微信截图_20221004113034.png