java集合框架:
来源:互联网 发布:客户特殊要求矩阵图 编辑:程序博客网 时间:2024/06/07 05:25
从自己的认识中,总结下java集合框架:
1、Set:
对于HashSet 而言,它是基于HashMap实现的,HashSet底层采用HashMap来保存所有元素,因此HashSet的实现比较简单。
底层方式:在存放一个元素时,定义一个虚拟的object对象作为HashMap的Value。每个往HashSet中存放时实质上是
map.put<e,present>
对于:TreeSet:实现了sortedSet 接口的一个具体类。
底层实现:同样是利用HashMap来实现的,不过可以利用指定的比较器来实现排序,它是sortedSet接口的一个具体类。
2、线性表:
List:是collection的一个子接口,有ArrayList和LinkedList二者都为List的具体实现类。ListIterator,可以实现向前和向后的遍历。
ArrayList底层实现:用数组存储元素,这个数组是动态创建的,如果元素个数超过了数组的容量,就创建一个更大的数组,并将当前数组的元素复制到新数组中。
LinkedList在一个链表中存储元素。
3、Vector(向量集):Vector是线程安全的,ArrayList是线程不安全的。但是ArrayList比用Vector效率高。
4、stack,可以用ArrayList<>和数组实现。
5、图:Map
HashMap:底层实现是通过初始化一个Entry数组来实现key,Value的保存,向HashMap中添加值得步骤:
(1)、对key的hashCode进行hash计算,获取应该保存到数组中的index
(2)、判断index所有指向的数组元素是否为空,如果为空则直接插入。
(3)、若果不为空,则依次查找entry中的next所指定的元素,判断key是否相等,如果相等则替换久的值,返回。
(4)、如果都不想等,则将比链表元素赋值给待插入entry的next变量,然后将带插入元素插入到entry数组中去。
HashMap扩容,当超过数组大小 * locadFactor时,就进行数组扩容,loadFactor的默认值为0.75.数组大小默认为16,不够时自动翻倍。
put方法的实现原理:
当程序试图将一个key-value 对放入hashMap中时,程序首先根据该key的hashCode()返回值决定该Entry的存储位置:如果两个Entry的key的HashCode()返回值相同,那么它们存储的位置相同。如果这两个entry的key通过equals比较返回true,新添加的entry的value将覆盖集合中原有entry的value,但key不会覆盖。如果这两个Entry的key通过equals比较返回的fans,新添加的Entry将与集合中原有Entry形成entry链。
- Java集合:集合框架
- 【Java】java集合框架
- [Java]Java集合框架
- JAVA集合框架和集合
- 【集合】Java集合框架介绍
- Java集合之集合框架
- [集合]Java的集合框架 Collection集合
- Java集合框架 (一)
- Java集合框架 (二)
- Java集合框架(三)
- Java集合框架
- 也来谈Java集合框架
- 也来谈Java集合框架
- Java集合框架 (一)
- Java集合框架
- 也来谈Java集合框架
- java集合框架
- Java集合框架总结
- pip 安装包时指定pypi资源地址
- Matlab图像处理常用语句(1)--批量读取文件夹内图像
- test
- POJ1979 Red and Black(深搜DFS)
- Qt之二维绘图
- java集合框架:
- C++标准IO库
- 自定义View想使用Scroller实现滑动效果,但是事件接收出现问题,只收到ACTION_DOWN,而无法收到ACTION_MOVE, ACTION_UP等消息的处理
- Qt的画图相关
- 三极管相关知识
- 【linux】task_struct结构体
- codeforces 754 A Lesha and array splitting
- Trees on the level 树的层次遍历 UVA 122(BFS)
- Python解析mnist出错的解决方法