集合框架和数据结构
来源:互联网 发布:网络覆盖 编辑:程序博客网 时间:2024/06/02 02:28
4, 初始时,iterator指向第0个元素.它的next()方法先返回当前值,再跳转到下一个元素。他的previous方法,先回到上一个元素,在返回上一个元素。
5, 递归和迭代基本是可以相互转换,递归的原理是拿空间换时间,因为递归的过程会产生大量的栈帧,但时间复杂度要约为减少。
6, Map的key都是以set方式存储,value是以list,map的迭代器。HashMap中的entrySet()、keySet()、values()等方法都使用到了迭代器Iterator,其中entrySet()返回一个set集合,集合中存放map,即set<entry.map<key,value>>.
7, 类中重写equals方法时需要重写hashcode方法。
(2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false
9, Collections类中的sort为归并排序,只能接受序列,不能为基础类型;Arrays类中的sort为快排序,可以接受数组和序列。Collections.sort() 对列表进行排序,列表中的元素必须实现compareable接口。如果没有实现compareable,可以在第二个参数处传递一个实现了comparabtor的对象进去。Arrays.sort还可以排序数组。
10,一致性哈希
http://blog.sina.com.cn/s/blog_3fde8252010147j5.html
http://blog.csdn.net/cywosp/article/details/23397179
http://www.cnblogs.com/hzmark/archive/2012/12/24/HashMap.html
resize方法:使用无参构造HashMap时,初始数组大小为INIT_SIZE=16,LOAD_FACTOR为0.75,当存入的键值对的个数大于INIT_SIZE*LOAD_FACTOR时,执行resize方法,将数组扩容2倍并将原数组键值对重新哈希。
在ReHash的过程后,HashMap的数组的内存可能与该对象成员变量不在一块区域,访问速度下降;产生大量垃圾,延长了gc。所以应尽量减少使用无参构造,而尽量设定数组初值。另外在并发情况下,该过程非常容易产生链表的死循环问题。
http://blog.csdn.net/liuhongxingrs/article/details/2942432
- HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:
- HashMap允许键和值是null,而Hashtable不允许键或者值是null;table[0]中的链表是否包含key为null的元素;
- Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
- HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。
- 一般认为Hashtable是一个遗留的类。
17,树:二叉搜索树:右孩子(右子树所有节点)>父亲>左孩子(左子树所有节点);查询和插入时,从根节点开始,大于根访问右,小于根访问左,最后在叶节点插入。删除时,如果不是叶子节点需要重构树。策略为先把该删除的删除,再从后继元素中找一个来代替。平均时间均为为O(logn),最差时间为O(n),取决于树的高度。
树的旋转可以减小树的高度:单旋转,双旋转(先让自己的子树绕孩子旋转,再绕自身旋转)。
AVL树和红黑树高度均为logN,可以在O(log n)时间内做查找,插入和删除等操作。AVL树左右子树高度最多相差1,左右子树均为AVL。
红黑树与AVL的比较:
AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多;
红黑是用非严格的平衡来换取增删节点时候旋转次数的降低;
说它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1。
但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。
所以简单说,如果你的应用中,搜索的次数远远大于插入和删除,那么选择AVL,如果搜索,插入删除次数几乎差不多,应该选择RB。
TreeMap的底层实现 http://www.cnblogs.com/yydcdut/p/4009201.html 红黑树在进行插入和删除后要进行旋转和着色调整。
18,堆是一棵完全二叉树,孩子的值大于父亲,i节点的两个孩子的索引为2i+1和2i+2.
堆调整:将堆中的某个元素与其父节点交换,直到满足条件为止。推排序就是不断进行堆调整,不断取走跟元素。
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象,否则会抛出异常。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
- #define MAXSIZE 100;
- typedef struct{
- ElemType data;
- int cur;
- }component,SLinkList[MAXSIZE];
- 集合框架和数据结构
- 集合框架_数据结构之栈和队列
- 集合框架_数据结构之数组和链表
- 集合框架(数据结构之栈和队列)
- 集合框架(数据结构之数组和链表)
- 集合框架和集合
- java集合框架中的数据结构
- java集合框架中的数据结构
- 《数据结构和Java集合框架第三版》读书笔记(零)——数组、类、集合
- JAVA (集合和数据结构)
- JAVA集合框架和集合
- JavaSE集合框架-01-集合框架体系及表数据结构
- 【Java】Java集合框架源码和数据结构简要分析——Set和Map
- 集合框架和map
- 集合框架_集合的特点和数据结构、如何选择使用哪种集合呢、各种集合常见功能和遍历方式总结
- 一起学 Java集合框架、数据结构、泛型
- 集合框架关系类图(数据结构)
- [总结]数据结构之jcf(java集合框架)
- 计算机网络总结
- Linux and Shell
- 大型网站构架
- C/C++
- 论文核心思想总结
- 集合框架和数据结构
- HMM-维特比算法原理和实现
- 内存池的概念、设计和实现
- Spring结合Quartz进行任务调度
- Python range()函数
- 回溯法解决0-1背包问题
- 堆排序java实现
- opencv提取图像边缘特征sobel算子的运用
- 小南的数据结构目录