java
文章平均质量分 79
饭小粒
蓝牙&Android&iOS&EN
展开
-
java hashmap容量_为啥HashMap的默认容量是16?
我们知道,容量就是一个HashMap中"桶"的个数,那么,当我们想要往一个HashMap中put一个元素的时候,需要通过一定的算法计算出应该把他放到哪个桶中,这个过程就叫做哈希(hash),对应的就是HashMap中的hash方法。我们知道,hash方法的功能是根据Key来定位这个K-V在链表数组中的位置的。hash运算的过程其实就是对目标元素的Key进行hashcode,再对Map的容量进行取模,而JDK 的工程师为了提升取模的效率,使用位运算代替了取模运算,这就要求Map的容量一定得是2的幂。转载 2023-03-13 09:38:09 · 930 阅读 · 2 评论 -
AndroidStudio自定义TODO
Preferences -> Editor -> TODO,然后点击左下角的加号,输入想要自定义的TODO的正则输入X.*(X为TODO标签的名字),这里以to_complete为例,输入把defaultcolor的勾选去掉,可以自定义直观的配色:两步你就可以手动输入并使用自定义的todo了,但输入不太方便,为了方便使用,就要用动态模板了。转载 2022-10-28 20:56:56 · 403 阅读 · 0 评论 -
HashMap排序
已知一个HashMap<Integer,User> 集合,User有name(String)和age(int)属性。请写一个方法实现对HashMap的排序功能,该方法接收HashMap<Integer,User> 为形参,返回类型为HashMap<Integer,User> ,要求对HashMap<Integer,User> 中的User的age倒序排序。排序时key=value键值对不得拆散。tips:要做出这道题必须对集合的体系结构非常的熟悉。...转载 2020-11-27 16:47:35 · 465 阅读 · 0 评论 -
Thread的setDaemon(true)方法的作用
定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。设置:通过setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在线程对象创建之前用线程对象的setDaemon方法。example:垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程...转载 2020-11-24 11:38:35 · 268 阅读 · 0 评论 -
全面的多线程面试题含答案(37道面试题)
多线程面试题:1.什么是线程,什么是进程,它们有什么区别和联系,一个进程里面是否必须有个线程(先讲进程)答案进程本质上是一个执行的程序,一个进程可以有多个线程。它允许计算机同时运行两个或多个程序。一个进程至少会有一个线程。线程是进程的最小执行单位。区别:多进程程序不受Java的控制,而多线程则受Java控制。多线程比多进程需要更少的管理费用。2.实现一个线程有哪几种方式,各有什么优缺点,比较常用的是那种,为什么答案线程有3种实现方式:①.通过继承Thread类,优点:可以转载 2020-10-08 15:05:13 · 4975 阅读 · 0 评论 -
Java 注解(Annotation)
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。网上很多关于 Java Annotation 的文章,看得人眼花缭乱。Java Annotation 本来很简单的,结果说的人没说清转载 2020-09-21 20:52:05 · 256 阅读 · 0 评论 -
HashMap底层实现和原理(源码解析)
Note:文章的内容基于JDK1.7进行分析,1.8做的改动文章末尾进行讲解。大家可以看一下:https://www.imooc.com/article/267756一、先来熟悉一下我们常用的HashMap1、概述HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null 值, 因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。HashMap是线程不安全的。2、继承关系转载 2020-09-19 16:23:22 · 195 阅读 · 0 评论 -
kotlin和java混合开发总结
声明:本文是作者AWeiLoveAndroid原创,版权归作者AWeiLoveAndroid所有,侵权必究。如若转发,请注明作者和来源地址!未经授权,严禁私自转载!我本来是不想学习kotlin的,但是现在的形势,很多公司都在使用kotlin开发,可以说学会kotlin也是无奈之举,既然是潮流,谷歌也在大力推广,所以还是只能硬着头皮逼迫自己学一下,也能更快适应公司的需要。正所谓:“识时务者为俊杰”,改变不了公司的发展,那就改变自己。本文首发在 慕课网,转载请注明原文链接和作者信息。废话少说,直接上正题转载 2020-09-15 15:48:51 · 1417 阅读 · 0 评论 -
缓存算法(FIFO 、LRU、LFU三种算法的区别)
FIFO算法FIFO 算法是一种比较容易实现的算法。它的思想是先进先出(FIFO,队列),这是最简单、最公平的一种思想,即如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小。空间满的时候,最先进入的数据会被最早置换(淘汰)掉。FIFO 算法的描述:设计一种缓存结构,该结构在构造时确定大小,假设大小为 K,并有两个功能:set(key,value):将记录(key,value)插入该结构。当缓存满时,将最先进入缓存的数据置换掉。 get(key):返回key对应的value值...转载 2020-08-26 08:48:12 · 2851 阅读 · 0 评论 -
浅谈偏向锁、轻量级锁、重量级锁
为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。理解偏向锁、轻量级锁、重量级锁的要解决的基本问题,几种锁的分配和膨胀过程,有助于编写并优化基于锁的并发程序。内置锁的分配和膨胀过程较为复杂,限于时间和精力,文中该部分内容是根据网上的多方资料整合而来;仅为方便查阅,后面继续分析JVM源码的时候也有个参考。如果对各级锁已经有了基本了解,读者大可跳过此文。隐藏在内置锁下的基本问题内置锁是JVM提供的最便捷的线程同步工具,在代码块或方法声明上添加synchronized关键转载 2020-08-14 09:21:39 · 362 阅读 · 0 评论 -
java死锁性能分析
只要是java程序, 都可以使用这种方式来分析性能的瓶颈1. Dump信息查看Thread dump信息对于性能诊断非常有用 kill 命令使用 kill : 杀死一个进程 -9: 强制杀死一个进程 -3: 打印进程的Thread dump信息 linux系统: kill -3 pid windows: 在命令行窗口上, 按一个组合键: ctrl + break(fn+B键) 2. 死锁程序分析java的一个死锁程序代码:public cl转载 2020-07-31 07:32:23 · 179 阅读 · 0 评论 -
Android多线程(二)
在上一篇中,我简单说了用AsyncTask来完成简单异步任务,但AsyncTask是把所有的异步任务放到一个队列中依次在同一个线程中执行。这样就带来一个问题,它无法处理那些耗时长、需要并行的的任务。如何处理这个难题呢?一是自己开启线程然后处理线程通信问题,二是使用HandlerThread这一便捷类来处理。万变不离其宗,先来说明Android线程、及线程通信的原理,然后对于那些便捷的API自然...转载 2018-11-23 19:55:26 · 100 阅读 · 0 评论 -
Java的clone():深复制与浅复制
Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,如下: 1 public class Student implements Cloneable { 2 3 private String name; 4 5 private int age; 6 7 private P...转载 2018-12-06 16:21:53 · 168 阅读 · 0 评论 -
collections
一、Collection是什么JavaCollection.png首先我们一起来探讨一下Collection究竟是什么个玩意,如上图所示List、Set、Queue、Map都指向Collection,它们都只是一个接口,并不是实现类。正因为有了Collection集合框架,使我们能方便的批量操作数据或对象。二、ListList是有序的Collection,我们可以非常轻松的来控制...转载 2018-12-12 19:26:57 · 118 阅读 · 0 评论 -
设计模式总结
从七月份开始一直到九月底才看完设计模式,在这个过程中我不敢说我已经掌握了那本书里面的内容,或者说1/5,没能力说也没有资格说。但是结果不重要,重要的是这个过程我的收获!主要包括如下几个方面:1、认识了这么多设计模式。刚刚接触java没多久就在学长那里听过设计模式的大名,但是由于能力有限,一直不敢触碰。而今有幸将其都认识了。2、开始有设计的理论了。在接触设计模式之前没有怎么想过设计方面东东,...转载 2018-12-04 19:15:29 · 141 阅读 · 0 评论 -
我所理解的MVC,MVVC,MVVM模式,给控制器层大瘦身
MVC是过去常用的架构模式,随着App的发展,界面的多样化,显然再使用MVC模式的会导致ViewController代码不断增多,更容易造成一些冗余的代码,如果作为迭代项目的话,更加不易维护。从而诞生了MVVM的架构模式。想想介绍请看下面具体内容MVC(Model-View-Controller)Model(模型):数据层,负责存储数据。View(视图):展现层,用户所看到的页面...转载 2018-11-29 18:00:25 · 2820 阅读 · 0 评论 -
Android多线程通信机制
掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么。1. 进程在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序/进程的干扰)。一般来说,当我们启动一个应用程序时,系统会创建一个进程(从Zygote中fork出来的,这个进程会有独立的ID),并为这个进程创建一个主线程(UI线程),然后就可以运行MainA...转载 2018-11-23 19:25:17 · 136 阅读 · 0 评论 -
Android(国际化)多语言的实现和切换
Android 的多语言设置在开发中时有用到,实现也不复杂,主要包括三个方面不同语言的资源的实现,即string.xml的实现利用Locale改变系统的语言设置 首先需要将不同语言版本的资源配置好 新建values文件夹,不同国家的文件夹名字不一样 根据需要选择建立对应语言的资源文件夹,文件夹名称系统会自动生成 ...转载 2018-11-25 08:26:20 · 491 阅读 · 0 评论 -
Java的GC机制及算法
GC的阶段对每个对象而言,垃圾回收分为两个阶段:finalization和reclamation。 finalization: 指运行这个对象的finalize的方法。 reclamation: 回收被这个对象使用的内存。GC的过程的基本步骤 首先确认对象是不可达的,即将被回收。 其次,如果对象有finalize方法,那么对象被添加进finalization q...转载 2018-11-23 15:38:08 · 123 阅读 · 0 评论 -
java编程中遇到的时区与时间问题总结
(摘自http://www.cnblogs.com/flying5/archive/2011/12/05/2276578.html)最近在编程中遇到了时间与时区相关的问题,整理在这里 我的程序是一个在hadoop上运行的分布式程序,从mysql数据库中取数据,经过处理之后输出一. 基本概念 时区 :time zone 1884年国际经线会议规定,全球按经度分为24个时区,每区各...转载 2018-11-23 15:35:28 · 433 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那...转载 2018-11-23 15:28:32 · 94 阅读 · 0 评论 -
Stack的三种含义
学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分。含义一:数据结构stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。在这种数据结构中,数据像积木那样一层层堆起来,后面加入的数据就放在最上层。...转载 2018-11-23 10:36:28 · 332 阅读 · 0 评论 -
String类为什么是final的
作者:胖君链接:https://www.zhihu.com/question/31345592/answer/114126087来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 大白话解释就是:String很多实用的特性,比如说“不可变性”,是工程师精心设计的艺术品!艺术品易碎!用final就是拒绝继承,防止世界被熊孩子破坏,维护世界和平!1....转载 2018-11-23 10:20:43 · 378 阅读 · 0 评论 -
一些面试题
一、Java基础1. String类为什么是final的。2. HashMap的源码,实现原理,底层结构。3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。。。4. 描述一下ArrayList和LinkedList各自实现和区别5. Java中的队列都有哪些,有什么区别。6. 反射中,Class.forName和classloader的区别...转载 2018-11-23 10:10:30 · 158 阅读 · 0 评论 -
详解Java中的clone方法 -- 原型模式
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1 使用new操作符创建一个对象2 使用clone方法复制一个对象那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到...转载 2018-12-06 16:31:11 · 161 阅读 · 0 评论 -
java 实现CRC32校验
https://blog.csdn.net/yjk2515279130/article/details/46045939实现了CRC32校验,本来java那边是很简单的,直接用 java.util.zip.CRC32 这个类就可以了,可是如果要和Delphi那里的CRC32进行校验的话,就那得好好看实现的算法了! package regex;public class CRC32 { ...转载 2018-12-26 14:49:51 · 1691 阅读 · 0 评论 -
CRC32
CRC校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。 [1] 程序库特点编辑检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,...转载 2018-12-26 14:52:31 · 409 阅读 · 0 评论 -
浅析Java中的final关键字
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正。 请尊重作者劳动成果,转载请标明原文链接: htt转载 2017-08-11 20:02:12 · 183 阅读 · 0 评论 -
聊聊并发(一)深入分析Volatile的实现原理
本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/ftf-java-volatile引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改...转载 2019-08-21 16:21:30 · 147 阅读 · 0 评论 -
Lmbench
Lmbench是一套简易可移植的,符合ANSI/C 标准为UNIX/POSIX 而制定的微型测评工具。一般来说,它衡量两个关键特征:反应时间和带宽。Lmbench 旨在使系统开发者深入了解关键操作的基础成本。主要功能 带宽测评工具 反应时间测评工具 其他 读取缓存文件 拷贝内存 读内存 写...转载 2019-08-23 17:58:32 · 591 阅读 · 0 评论 -
阿里一道Java并发面试题 (详细分析篇)
说明前天分享了一篇关于阿里的“Java常见疑惑和陷阱”的文章,有人说这个很早就有了,可能我才注意到,看完之后发现内容非常不错,有几个我也是需要停顿下想想。题目我个人一直认为: 网络、并发相关的知识,相对其他一些编程知识点更难一些,主要是不好调试并且涉及内容太多 !所以今天就取一篇并发相关的内容分享下,我相信大家认真看完会有收获的。大家可以先看看这个问题,看看这个是否有问题呢? 那里...转载 2019-06-18 11:15:41 · 267 阅读 · 0 评论 -
Java 8 基础教程 - Predicate
在Java 8中,Predicate是一个函数式接口,可以被应用于lambda表达式和方法引用。其抽象方法非常简单: /** * Evaluates this predicate on the given argument. * * @param t the input argument * @return {@code tru...转载 2019-04-26 11:25:03 · 365 阅读 · 0 评论 -
探索Java8:(三)Predicate接口的使用
上一篇学习了下Function接口的使用,本篇我们学习下另一个实用的函数式接口Predicate。Predicate的源码跟Function的很像,我们可以对比这两个来分析下。直接上Predicate的源码:public interface Predicate<T> { /** * Evaluates this predicate on the given ...转载 2019-04-26 11:23:29 · 373 阅读 · 0 评论 -
InputStream读取数据问题
1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法。这个方法是从流里每次只读取读取一个字节,效率会非常低。 更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次读取多个字节。2. 关于I...转载 2019-01-30 20:49:33 · 224 阅读 · 0 评论 -
byte[]数组和int之间的转换
这里简单记录下两种转换方式:第一种:1、int与byte[]之间的转换(类似的byte short,long型) [java] view plain copy /** * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。 和bytesToInt()配套使用 * @param value * ...转载 2019-01-02 09:13:24 · 449 阅读 · 0 评论 -
Java中System.arraycopy方法的使用
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)1 src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; des...转载 2018-12-27 17:50:39 · 455 阅读 · 0 评论 -
java byte的学习和理解
所以下面三者等价:参考:http://blog.csdn.net/lvxiangan/article/details/41294989byte [] aa = {00010110, 01010010, 10111000};byte [] aa = {0x16, 0x52, 0xB8};byte [] aa = {22, 82, 184};...转载 2018-12-27 15:15:51 · 418 阅读 · 0 评论 -
ooad
OOAD(Object Oriented Analysis Design,面向对象的分析和设计,面向对象分析与设计)是现代软件企业广为采用的一项有效技术。OOAD方法要求在设计中要映射现实世界中指定问题域中的对象和实体,例如:顾客、汽车和销售人员等。这就需要设计要尽可能地接近现实世界,即以最自然的方式表述实体。所以面向对象技术的优点即为能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和行...转载 2018-12-10 10:24:48 · 206 阅读 · 0 评论 -
Encrypt
encrypt 是软件或者平时应用之中的加密的意思。比如电报,或者摩斯电码都是从容易明白的一层意思转化为另一层意思。相对而言的是解密decrypt.中文名加密外文名Encrypt应用范围软件或者平时应用作 用保证文件或电子邮件传送的安全目录1 介绍 2 类型▪ 对称密钥/私钥 ▪ 公钥 3 用途▪ 消息验证 ▪ 数据擦除 Encry...转载 2018-12-26 14:58:11 · 1533 阅读 · 0 评论 -
JDK源码分析之Object
Java作为一种面向对象(Object Oriented)的编程语言,一切事物都可以看成对象,而Object是java一切Class的父类,也就是说,java中一切除Object的class都继承自Object,因此对Object类的理解对于学习java有着至关重要的意义。 从类方法看Objectjava设计者将几乎所有的类都需要的高频使用的方法集成到一个超类中,这就是Object,O...转载 2019-01-10 16:05:42 · 152 阅读 · 0 评论