集合笔记
来源:互联网 发布:nginx在windows配置 编辑:程序博客网 时间:2024/06/05 00:13
浅谈集合:
集合就是容器,存放元素的东西。数组就是一个集合。
集合的分类:从存放个数来讲:Collection (接口1)------list(接口1)-------ArrayList(类1) Iterator(接口1)
--------LinkedList(类1)
------set(接口1)---------HashSet(类1)
--------TreeSet(类1)
Map(接口2)-----------HashMap(类2)
-----------TreeMap(类2)
1、ArrayList:底层是用一个存放Object类型的数组来实现的 private Object [] elementData。也主要是在这个数组上进行操作。
构造函数:是空的构造函数数组的长度为10。
扩容问题:因为是底层是数组因此需要扩容。在每一次添加元素的时候都要判断是不是需要扩容,ensureCapacity()函数,就是用来确保add这个函数能够正常执行,size+1==length的时候就需要扩容。扩容的函数基本思路是length*3/2+1。这样操作后剩下的元素扩容前的一半容量。
拷贝:如果扩容以后就需要进行元素的拷贝,这里用的函数是Arrays.copyof()。底层调用的是System.arraycopy().这个函数是c++写的。比较快。
2、LinkedList:主要的操作对象是一个内部类Entry节点实现的双向循环列表。
构造函数:初始化是一个head的空节点。
不存在扩容问题(也是集合中唯一一个不需要扩容的类)
但是这里要进行null和非null的判断。
3、HashMap:主要是维护一个存放Entry节点的数组table。
构造函数:这里的构造函数需要初始化table的长度,和增量因子,默认是16和0.75。当数组的元素个数达到当前元素个数的0.75倍的时候就进行扩容2倍。
扩容:这里调用的tranfer函数进行扩容和ArrayList扩容思路一致。
核心算法:用位运算的方式进行散列。这样不涉及到除法,这点也是Hashtable的改进之处(除留取余法)
4、HashTable:初始化大小为11.增量因子0.75.扩容:2倍+1
5、TreeMap:用红黑树的方式对Key进行排序,当然也可以覆盖Comparable接口,自定义排序顺序。key值不能为null.(HashMap中是可以为null的)。
TreeSet 和HashSet分别是TreeMap和HashMap实现的,只是把value的值进行了固定化。过完这段时间好好看看。
- 集合笔记
- 集合笔记
- 集合笔记
- 集合笔记
- 集合笔记
- 集合笔记
- 集合笔记
- 笔记-集合
- 集合----笔记
- 集合笔记
- 集合笔记
- 笔记集合
- 集合学习笔记
- Java集合类笔记
- 集合框架笔记(下)
- haproxy笔记集合
- java集合框架笔记
- 集合小笔记
- 快学Scala读书笔记之 Chapter 8(继承)
- iptables扫盲!!!
- 关于函数指针
- LINQ to SQL语句
- 普通用户的注册和管理员的权限操作
- 集合笔记
- 获取treeviewitem对象和TreeViemItem对象的一些问题
- 111 AddressBookUI
- Json的一些了解
- 队列实现迷宫问题
- binder驱动使用的数据结构说明
- Modeling Video Evolution For Action Recognition - cvpr - 2015
- @selector 调用方法 传递多参数
- 点击屏幕任意区域软键盘消失