java集合框架

一、集合概念

1、什么是集合

在这里插入图片描述

对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能。

2、集合和数组的区别

  • 数组长度固定,集合长度不固定
  • 数组可以存储基本类型和引用类型,但是集合只能存储引用类型

二、collection

1、collection体系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
collection.clear
在这里插入图片描述
在这里插入图片描述

2、collection使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用collection保存student信息:
student类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、List集合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、List实现类

在这里插入图片描述

2、ArrayList使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、ArrayList源码分析

ArrayList:
源码分析:

  • DEFAULT_CAPACITY = 10 默认容量(注意:如果没有向集合中添加任何元素的时候,容量为0;添加一个元素之后,容量为10)(每次扩容的大小为原来的1.5倍
  • elementData:存放元素的数组
  • size:实际的元素个数
  • add():添加元素
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }

    private void ensureCapacityInternal(int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
        }

        ensureExplicitCapacity(minCapacity);
    }
  private void ensureExplicitCapacity(int minCapacity) {
        modCount++;

        // overflow-conscious code
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }

 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

在这里插入图片描述

4、Vector使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、LinkedList使用

存储结构:双向链表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、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;
        }
    }

7、ArrayList和LinkedList区别

在这里插入图片描述

四、泛型

1、概述

在这里插入图片描述
把类型通过参数传递

2、泛型类

在这里插入图片描述
在这里插入图片描述

3、泛型接口

在这里插入图片描述

2种使用方法

1)
在这里插入图片描述
在这里插入图片描述
2)
在这里插入图片描述
在这里插入图片描述

4、泛型方法

在这里插入图片描述
在这里插入图片描述
综上,可以看出泛型的好处:
在这里插入图片描述

5、泛型集合

如果没有传入数据的话,是泛型的,默认为object,但是回来取的时候,需要进行强制转化
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
更正:
在这里插入图片描述

五、set集合

1、概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、set实现类

1)hashset

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

重写hashCode和equals方法
在这里插入图片描述
练习:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补充:
默认生成的hashcode分析:
在这里插入图片描述

2)Treeset

在这里插入图片描述
treeset存储结构:红黑树

红黑树是二叉查找树,红黑是为了保持平衡

在这里插入图片描述
在这里插入图片描述
如果是使用它来存储数据,需要定义比较的规则,不然会报错:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
comparator接口

在这里插入图片描述
在这里插入图片描述
小例子:
在这里插入图片描述

六、map集合

1、概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、map集合的实现类

1)hashmap

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
hashcode:找位置
equals:判断是否形成链表

2)hashmap源码分析
    static final int TREEIFY_THRESHOLD = 8;
    //链表长度大于8,并且数组长度>64,则将其调正为红黑树

在这里插入图片描述

//无参构造
  public HashMap() {
        this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
    }

在这里插入图片描述
目的:节省空间
在这里插入图片描述

3)hashmap和hashset的关系

在这里插入图片描述
在这里插入图片描述
hashset中使用的是hashmap的key
在这里插入图片描述

4)、hashtable和properties

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)Treemap:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

treeset和treemap的关系:
在这里插入图片描述
在这里插入图片描述
treeset中使用了treemap

七、collections工具类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

八、集合总结

在这里插入图片描述
ArrayList:数组
LinkedList:双向链表
hashset:哈希表
treeset:红黑树(排序,必须要实现比较的方法的接口)
hashmap:哈希表
treemap:红黑树

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值