Java笔记之常用容器浅析

这里写图片描述
图片出自《Java编程思想》

上图清楚且完整的描述了集合包中的类以及接口之间关系
本篇文章只介绍常用的容器及其原理

首先Collection接口的常用三大子接口listsetqueue

List接口常用实现类

  1. ArrayList

     //这是arraylist的源码
    transient Object[] elementData; 
     //由这个构造函数可以看出ArrayList其实就是一个数组,
     //所以arraylist的效率很好
    public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }

由上述源码可知ArrayList由数组实现,数组大家都很熟,不做过多解释。

2.Linkedlist

这里写图片描述

由图片便可看出这是基于链表实现的
不过linkedlist有些有趣的方法
除了包含链表的增删改查

这里写图片描述

竟然将栈和队列的方法加进去了

这里写图片描述

peek方法就是返回容器头数据不删除
poll方法返回容器头数据并删除

链表的知识可以参考链表

提示 Java的stack类是基于Vector容器,这种老旧的容器是为了兼容。所以尽量不要使用。

SET接口其子类保持一个原则就是不予许重复

SET常用的子类

1 HashSet

这里写图片描述

显而易见hashset基于Hashmap实现的
有和不同。

HashSet<Integer> hashSet = new HashSet<>();
System.out.println(hashSet.add(55));
System.out.println(hashSet.add(55));
运行结果
true
false

所以hashset是不能重复的

treeSet基于treemap实现
treeSet不能重复属性
注意treeSet是有序的
treemap是基于红黑树实现的,
红黑树是一种平衡树有兴趣的同学可以去了解一下

Map 也就是图 属于集合包的另一方向。十分重要
常用类

1 hashmap

这里写图片描述

API中清楚的解释了hashmap的一些信息但是并没有说明其实现方法通过观察源代码发现其实现方法为分离链式法

不懂的同学可以参考分离链式法

这里写图片描述

注意 hashmap的put方法
将指定的值与此映射中的指定键相关联。
如果hashmap以前包含一个关键字的映射,那么旧的值被替换。
所以其并不是严格分离链式法解决hash冲突

水平有限,若有错误,欢迎指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值