Java笔记之常用容器浅析

来源:互联网 发布:网页生成软件 编辑:程序博客网 时间:2024/06/04 17:58

这里写图片描述
图片出自《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));运行结果truefalse

所以hashset是不能重复的

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

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

1 hashmap

这里写图片描述

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

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

这里写图片描述

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

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

0 0