数据结构与算法
文章平均质量分 72
数据结构与算法
Mars-xq
好记性不如烂笔头。
展开
-
Java线程安全的集合详解
摘自:https://blog.csdn.net/lixiaobuaa/article/details/79689338一、早期线程安全的集合我们先从早期的线程安全的集合说起,它们是Vector和HashTable:1.VectorVector和ArrayList类似,是长度可变的数组,与ArrayList不同的是,Vector是线程安全的,它给几乎所有的public方法都加上了synch...原创 2019-03-05 11:31:46 · 765 阅读 · 0 评论 -
LruCache分析
参考:内存缓存LruCache实现原理 LruCache原理和用法与LinkedHashMap英文单词:trim:[trɪm] 修剪evict:[ɪ'vɪkt] 驱逐,赶出eviction: [ɪ'vɪkʃ(ə)n] 逐出;赶出;收回LRU即Least Recently Used,近期最少使用算法。也就是当内存缓存达到设定的最大值时将内存缓存中近期最少使用的对象移除,有效的避免了OOM的出现。原创 2017-09-27 16:42:53 · 456 阅读 · 0 评论 -
LRU和LFU的区别
LFU和LRU算法的不同之处:LRU的淘汰规则是基于访问时间, 而LFU是基于访问次数的。LFULFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。具体实现如下: 新加入数据插入到队列尾部(因为引用计数为1);队列中的数据被访问后,引用计数增加,队列重新排序;当需要淘汰数据时,将已经排序的原创 2017-06-21 17:48:16 · 3115 阅读 · 0 评论 -
二维数组的遍历
public class TestArray { private static Point[][] mPoints = new Point[3][4]; public static void main(String[] args) { //第一行 mPoints[0][0] = new Point(0, 0); mPoints[0...原创 2019-02-28 14:51:27 · 2040 阅读 · 0 评论 -
Java-算法分析及其优劣判断
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。1、时间复杂度算法的时间复杂度是指执行算法所需要的时间。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做 T(n)=Ο(f(n))因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,原创 2017-06-25 18:10:52 · 2569 阅读 · 0 评论 -
java-素数(质数)
质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数。import java.util.Scanner;/** * Created by Administrator on 2017/6/23. */public class SuShu { public static void main(String[] args) { Scanne原创 2017-06-23 23:38:17 · 2370 阅读 · 0 评论 -
java-完数
若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数。简称“完数” 例如, 6=1+2+3 28=1+2+4+7+14 496=1+2+4+8+16+31+62+124+248 8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064 import java.util.Scanner;/*原创 2017-06-23 23:25:52 · 771 阅读 · 0 评论 -
Java-判断回文数
import java.util.Scanner;/** * 回文数:一种数字,如:12321, 这个数字正读是12321,倒读也是12321, * 即:将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样。 * Created by Administrator on 2017/6/23. */public class HuiWenTest { public static...原创 2017-06-23 23:10:15 · 5656 阅读 · 0 评论 -
java堆、栈、堆栈的区别
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令),用new的方式是生成不同的对象。每一次生成一个。只有通过new()方法才能保证每次都创建一个新的对象。 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本原创 2017-06-06 23:40:56 · 2434 阅读 · 0 评论 -
java-排序
import java.util.Arrays;/** * Created by Administrator on 2017/5/19. */public class sortTesty { public static void main(String[] args) { sortIntArray(); sortStringArray(); }原创 2017-05-19 12:19:07 · 335 阅读 · 1 评论 -
常见Java七大排序算法
排序算法原创 2017-01-11 21:57:00 · 7226 阅读 · 1 评论 -
集合的三种遍历方式for循环
数据元素是怎样在内存中存放的?数据元素在内存中,主要有2种存储方式: 1、顺序存储,Random Access(Direct Access): 这种方式,相邻的数据元素存放于相邻的内存地址中,整块内存地址是连续的。可以根据元素的位置直接计算出内存地址,直接进行读取。读取一个特定位置元素的平均时间复杂度为O(1)。正常来说,只有基于数组实现的集合,才有这种特性。Java中以Arra...原创 2016-12-19 12:47:49 · 7701 阅读 · 0 评论 -
集合-Queue 、Deque 、Stack/链表与数组的对比、DelayQueue、LinkedBlockingQueue
QueueQueue是具有队列特性的接口Queue具有先进先出的特点Queue所有新元素都插入队列的末尾,移除元素都移除队列的头部队列, 一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高相关方法:boolean offer(E e):将元素追加到队...原创 2019-02-21 14:59:13 · 510 阅读 · 0 评论 -
java 算法 : 二分查找
转摘:Java实现的二分查找算法java实现的二分查找算法二分查找又称折半查找,它是一种效率较高的查找方法。折半查找的算法思想是将数列按【有序化(递增或递减)】排列,查找过程中采用【跳跃式】方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少...原创 2019-02-28 10:59:15 · 176 阅读 · 0 评论 -
arraylist,与linkedlist:vector区别
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ private s原创 2019-01-23 16:47:24 · 234 阅读 · 0 评论 -
性能优化: HashMap & SparseArray & ArrayMap
参考:HashMap & SparseArray & ArrayMap 简单说明安卓性能优化—使用ArrayMap与SparseArray简介:ArrayMap与SparseArray都要比传统的HashMap 更有效率;但是当数据量达到千级以上的时候,ArrayMap与SparseArray都要比传统的HashMap 效率更低50%;ArrayMap和SparseArr...原创 2019-02-28 10:57:59 · 530 阅读 · 0 评论 -
集合:list、set与map(HashMap、TreeMap和HashTable、LinkedHashMap、ConcurrentHashMap)
推荐阅读:java面试总结(五) —— Collection、List、ArrayList、LinkList、Vector、Setjava面试整理(四)—— HashMap、LinkedHashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别Ma...原创 2019-02-22 10:51:16 · 319 阅读 · 0 评论 -
hashmap
参考:面试总结hashmapHashMap常问面试题整理hashmap的源码public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{ //桶(capacity)容量,即数组长度. //即在...原创 2019-01-23 16:11:36 · 165 阅读 · 0 评论 -
集合-LinkedHashMap源码分析
参考:【Java集合源码剖析】LinkedHashmap源码剖析entry: [ˈentrɪ] 进入;入口LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序与输入顺序相同。LinkedHashMap可以用来实现L原创 2017-09-27 16:39:00 · 309 阅读 · 0 评论 -
Java - 集合转换(数组、List、Set、Map相互转换)
import java.util.*;/** * Created by Administrator on 2017/5/19. */public class ConvertorTest { /** * @param args */ public static void main(String[] args) { testList2Array();原创 2017-05-19 16:50:09 · 300 阅读 · 0 评论