Java集合专题—韩顺平—2021-03-17

视频链接一.:(1~) 1::   1):    -1:    -2:    -3:    -4:    -5:   2):    -1:    -2:    -3:    -4:    -5:   3):    -1:    -2:    -3:    -4:    -5:   4):    -1:    -2:    -3:    -4:    -5:   5):    -1:    -2:    -3:    -4:    -
摘要由CSDN通过智能技术生成

视频链接

一.:集合框架介绍、体系图(1~6)

二.:Collection(7~32)

1:ArrayList:

   1)ArrayList 注意事项:
    -1:可以加入多个 null。
    -2:ArrayList 是由数组:来实现数据存储的。
    -3:ArrayList 基本等同于 Vector:
(除了 ArrayList 是线程不安全,但执行效率高)(不建议多线程使用)

   2)JDK 1.7:
    -1:ArrayList 中,维护了一个 Object 类型的数组:【 transient Object[] elementData; 】
    -2:new ArrayList<>():底层创建一个底层长度为 10 的 Object[] 类型数组。

    -3:list.add(“xx”):添加时,先确认容量够不够。
    -4:若长度不够:默认情况下,扩容为原来的 1.5 倍。(并将原来的数据,复制到新数组)。(然后再在新数组末尾添加元素)

    -5:结论:建议开发中使用带参数构造器,规定底层创建数组的长度,避免底层频繁的扩容。

   3)JDK 1.8:
    -1:new ArrayList<>() :底层 的 Object[] elementData 初始化为 { },长度为0,并没有创建长度为 10 的数组,
    -2:list.add(“xx”):第一次调用 add() 时,底层才创建了长度为 10 的数组,并将数据 123 添加到 elementData。
    -3:后续的(添加 & 扩容)操作,与 JDK 1.7 一致。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    -4:老韩源码分析:
在这里插入图片描述

   4)小结:
    -1:JDK1.7 有点像 饿汉模式;JDK 1.8 有点像懒汉模式。


2:Vector:

   1)基本介绍:
    -1:线程安全,效率低。
    -2:Vector 底层也是一个对象数组:( protected Object[] elementData; )
    -3:Vector 是线程同步的,即:线程安全的。( 操作方法带有:synchronized )
    -4:开发中,如果需要线程同步安全时,考虑使用 Vector。


3:LinkedList:

   1)LinkedList 全面说明:
    -1:LinkedList:实现了(双向链表 & 双端队列)的特点。
    -2:可以添加任意元素:(包括 null)
    -3:线程不安全,没有实现同步。
    -4:频繁的 插入或者删除元素,建议使用 LinkedList。
    -5:常用方法:
在这里插入图片描述

   2)LinkedList 底层结构:
    -1:底层维护了一个双向链表。
    -2:维护了两个属性:(first & last)里面又维护了 prev、next、item 三个属性。最终实现双向链表。
1、prev:指向前一个节点;
2、nect:指向后一个节点;
    -3:添加 / 删除操作:是通过链表完成的,效率高。
在这里插入图片描述

   3)new LinkedList<>():
    -1:​底层使用构造方法,创建 LinkedList 对象。(长度为 0)

    -2:内部 使用 Node 存储数据:Node内部封装了三个数据,前一个Node,核心数据,后一个Node;
    -3:LinkedList 类内部定义两个属性:储存了链表的 头节点 和 尾节点,默认值为 null。
在这里插入图片描述

   4)手写 链表:

/**
 * @author zhangxudong@chunyu.me
 * @date 2022/4/12 8:02 下午
 */
public class Test01 {
   
    public static void main(String[] args) {
   
        Node zhangsan = new Node("张三");
        Node lisi = new Node("李四");
        Node wangwu = new Node("王五");

        // 张三 -> 李四 -> 王五
        zhangsan.next = lisi;
        lisi.next = wangwu;
        wangwu.pre = lisi;
        lisi.pre = zhangsan;

        Node first = zhangsan;//定义头节点
        Node last = wangwu; // 定义尾节点

        // 添加对象:在 张三 和 李四之间,添加哈哈哈
        Node hhh = new Node("哈哈哈");
        zhangsan.next = hhh;
        hhh.pre = zhangsan;
        hhh.next = lisi;
        lisi.pre = hhh;

        // 链表遍历(从头到尾)
        while (true) {
   
            if (first == null) {
   
                break;
            }
            System.out.println(first);
            first = first.next;
        }
        //Node{item=张三}
        //Node{item=哈哈哈}
        //Node{item=李四}
        //Node{item=王五}
    }
}

class Node {
   
    public Object item;    // 存放数据
    public Node next;  // 指向下一个节点
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值