
算法和数据结构
jzq1999
这个作者很懒,什么都没留下…
展开
-
HashSet解析
HashSet实现了Set接口,由hash表支持(实际上是一个HashMap的实例)。HashSet不保证集合的迭代顺序;特别是不保证顺序恒久不变。允许使用null元素。 HashSet为基本操作提供了稳定的性能,这些操作包括add(),remove(),contains()和size(),假定hash函数已经将这些元素正确地分布在桶中。对集合进行迭...2009-10-26 18:48:37 · 93 阅读 · 0 评论 -
LinkedList源码解析
LinkedList和ArrayList不同,是双向链表,每个元素持有对上一个和下一个元素的引用,便于插入(add(index))和删除操作,查找操作(get(index))需要遍历每个元素,故适用于频繁添加和删除元素,查找元素较少的场合。 LinkedList中的数据结构用例和HashMap中一样,存放的是模拟实体Entry对象。定义头部指针privat...原创 2014-05-18 03:03:07 · 88 阅读 · 0 评论 -
HashMap的进一步理解
1. 数据结构transient Entry[] table;用数组和链表来实现,实质是链表数组,更进一步说是散列链表数组,因为每一个链表的散列值相同,即Entry的数组,链表和数组的区别见:http://geeksun.iteye.com/blog/1709418Entry(Key,value,next) 2. Entry链表实际上HashMap存放的对象是Entry...原创 2014-05-13 22:49:39 · 145 阅读 · 0 评论 -
快速排序
快速排序本质上是把一个数组分为两个数组,然后递归调用自身来为每一个子数组进行快速排序来实现的,又称划分排序,是一个递归的过程。 public class QuickSort{ /** * @param data 要排序的数组 * @param left 左边数组下标 * @param right 右边数组下标 */ static void qu...原创 2012-10-07 23:46:11 · 110 阅读 · 0 评论 -
二分查找法
二分查找法,顾名思义,是一种一分为二的查找算法,适用于已排序的数组(大数据量),快速地找到所查找数的位置。源代码: /** * @param i 数组 * @param key 要查找的Key * @return */ static int binarySearch(int[] i, int key){ Arrays.sort(i); int l...原创 2012-09-26 22:52:35 · 89 阅读 · 0 评论 -
算法复杂度
算法的复杂度分为时间复杂度和空间复杂度,时间复杂度是算法执行时间的多少,空间复杂度是算法占用空间的大小。1. 时间复杂度:1.1 时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比...原创 2012-11-01 13:59:18 · 100 阅读 · 0 评论 -
链表和数组
1. 数组静态分配内存,链表动态分配内存; 2. 数组在内存中连续,链表不连续; 3. 数组元素在栈区,链表元素在堆区; 4. 数组利用下标定位,时间复杂度为O(1),链表利用引用定位元素时间复杂度O(n); 5. 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度 O(1)。总结: 如果是数据数量不发生变化,就使用数组;如果数据数量经常发生变化,就使用动态数组(Arra...原创 2012-10-31 11:40:54 · 204 阅读 · 0 评论 -
生产者和消费者模式
消费者和生产模式是典型的软件应用场景,比如工厂生产出产品,先送到商店,消费者再到商店去买。 生产者不会每生产一个就送到商店去,一般是生产一定数量的产品,比如生产数量为N时,再送到商店去,这样减少来回运输的成本。这样当商店的N个产品卖完时,消费者再来买时需要等待(wait),当商店有N个产品未卖时,生产者需要停止生产,等待产品销售,产品量小于N时再开始生产。...原创 2012-10-30 15:33:45 · 129 阅读 · 0 评论 -
求100以内的素数
题目:除了能被自身和1整除外,不能被其他数整除的数,为素数。解决方案一: static void prime(){ int i,j; for(i=1;i<100;i++){ for(j=2;j<i;j++){ if(i%j==0){ break; } } if(i<=j){ System....原创 2010-09-19 17:39:34 · 109 阅读 · 0 评论 -
哈希(hash)算法
前言 在java中,每个对象(Object)都有对应的hashcode,hashcode,顾名思义,就是散列的意思,把对象分散存储,哈希(hash)算法将数据依特定算法直接指定到一个地址桶(bucket:一个链表)上,当集合中增加新的元素时,调用这个元素的hashcode()方法,把这个元素定位到它应该放置的桶的位置上。如果这个桶的位置上没有元素,它就可以直接存储在这个桶的位置...原创 2009-11-09 19:00:29 · 146 阅读 · 0 评论 -
位移运算
&:位与运算符 位与运算符,用来比较 0101 这样的二进制数,也可以比较boolean 值;&&: 逻辑与运算符,只能比较boolean值,是短路运算符,有“and”之意。例如:int i = 2 & 3;boolean l = false & true; //&: 位运算符System.out.println(i);Syste...2009-05-06 11:14:07 · 88 阅读 · 0 评论 -
HashMap解析
HashMap是基于哈希表的Map接口的实现,实际上是数组和链表的组合,允许null值和null键(HashMap和Hashtable大致一样,除了不同步和允许null外)。HashMap不保存映射的顺序,特别是不保证该顺序恒久不变。 HashMap的实现假定hash函数将各个元素正确分布在各桶之间,可为基本操作(如get()和set())提供稳定的性能,...2009-10-27 19:14:20 · 83 阅读 · 0 评论 -
ArrayList源码解析
ArrayList和HashMap、LinkedList一样,是常用的数据结构。ArrayList提供了一个动态数组,弥补了数组的长度固定,增加元素操作消耗大的不足。但因为ArrayList存储了对象数组,构造对象也造成了性能开销,所以相对布言,如果数组的长度可知,使用数组的效率最高,反之则可使用ArrayList。 ArrayList内部使用Object[]存储数据 ...原创 2014-05-18 23:33:34 · 113 阅读 · 0 评论