java
kcabmai
I'm back
展开
-
JAVA基础 之 泛型详解
一、概述什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的...转载 2018-08-10 09:34:14 · 117 阅读 · 0 评论 -
JAVA之数组查询binarySearch()方法详解
binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要,binarySearch()有两种参数类型注:此法为二分搜索法,故查询前需要用sort()方法将数组排序,如果数组没有排序,则结果是不确定的,另外如果数组中含有多个指定值的元素,则无法保证找到的是哪一个。⑴.binarySearch(object[ ], object key);如果key在数组中,...转载 2018-11-06 16:59:30 · 19127 阅读 · 1 评论 -
深入理解Callable
概述Callable和Runnbale一样代表着任务,区别在于Callable有返回值并且可以抛出异常。其使用如下:public class CallableDemo { static class SumTask implements Callable<Long> { @Override public Long call() throw...转载 2018-10-30 20:38:55 · 561 阅读 · 0 评论 -
深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
关联文章:深入理解Java类型信息(Class对象)与反射机制深入理解Java枚举类型(enum)深入理解Java注解类型(@Annotation)深入理解Java类加载器(ClassLoader)深入理解Java并发之synchronized实现原理Java并发编程-无锁CAS与Unsafe类及其并发包Atomic深入理解Java内存模型(JMM)及volatile关...转载 2018-10-30 20:36:41 · 75 阅读 · 0 评论 -
Java ExecutorService四种线程池的例子与说明
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start();那你就out太多了,new Thread的...原创 2018-10-30 20:32:20 · 104 阅读 · 0 评论 -
long(Long)与int(Integer)之间的转换
一.将long型转化为int型,这里的long型是基础类型:long a = 10; int b = (int)a; 二.将Long型转换为int 型的,这里的Long型是包装类型:Long a = 10; int b=a.intValue();三.将int型转化为long型,这里的int型是基础类型:int a = 10;long b = (int)a;四...原创 2018-10-23 17:57:43 · 14372 阅读 · 2 评论 -
ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别。
在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public static ByteBuffer allocateDirect(int capacity) 为什...转载 2018-10-11 11:29:51 · 6668 阅读 · 0 评论 -
java之HeapByteBuffer&DirectByteBuffer以及回收DirectByteBuffer
byte buffer一般在网络交互过程中java使用得比较多,尤其是以NIO的框架中;看名字就知道是以字节码作为缓冲的,先buffer一段,然后flush到终端。而本文要说的一个重点就是HeapByteBuffer与DirectByteBuffer,以及如何合理使用DirectByteBuffer。 1、HeapByteBuffer与DirectByteBuffer,在原理上,前...转载 2018-10-11 11:29:16 · 1379 阅读 · 0 评论 -
java复制文件的4种方式
一、使用FileStreams复制这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。 这是第一个方法的代码: 1 private static void copyFileUsingFileStreams(File source, File dest) 2 thr...原创 2018-10-11 11:08:06 · 7282 阅读 · 1 评论 -
Java正则表达式--Matcher.group函数的用法
原来,group是针对()来说的,group(0)就是指的整个串,group(1) 指的是第一个括号里的东西,group(2)指的第二个括号里的东西。最近学习正则表达式,发现Java中的一些术语与其他地方描述的有所差异。比如Java正则表达式中的“组”概念与《正则表达式必知必会》一书中讲述的“子表达式”其实是一样的,只是表述不同而已。由此也引发了使用JavaAPI时对group(int gro...原创 2018-11-02 14:17:24 · 1072 阅读 · 0 评论 -
Java 正则表达式
正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,例如 Hello World 正则表达式匹配 "Hello World" 字符串。.(点号)也是一个正则表达式,它匹配任何一个字符如:"a" 或 "1"。下表列出了一些正则表达式的实例及描述...原创 2018-11-02 15:20:04 · 96 阅读 · 0 评论 -
java查询mysql中文问题
String DBDRIVER= "com.mysql.jdbc.Driver";String DBURL ="jdbc:mysql://localhost:3306/netdisk?useUnicode=true&characterEncoding=utf-8";String DBUSER ="root";String DBPASS = "root";写mysql的URL时 ...转载 2019-02-15 15:00:18 · 447 阅读 · 0 评论 -
Java Socket编程基础及深入讲解
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程。Socket用在哪呢,主要用在进程间,网络间通信。本篇比较长,特别做了个目录:一、Socket通信基本示例二、消息通信优化 2.1 双向通信,发送消息并接受消息 2.2 使用场景 2.3 如何告知对方已发送完命令 2.3.1 通过Socket关闭 2.3.2 通过...转载 2019-01-15 12:11:25 · 133 阅读 · 0 评论 -
Java正则表达式匹配规则
1.1 正则表达式的概念正则表达式(英语:Regular Expression,在代码中常简写为regex)。正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。1.1 正则表达式的匹配规则参照帮助文档,在Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写...转载 2019-01-25 10:03:07 · 1398 阅读 · 1 评论 -
StringBuilder的容量capacity变化规则
StringBuilder的容量capacity变化,是每次2倍增长吗?(jdk1.8)测试代码 1StringBuilder sb = new StringBuilder();System.out.println(sb.capacity() + "----" + sb.length());sb.append("0000_0000_0000_0");System.out.println(...转载 2019-01-25 09:47:52 · 1753 阅读 · 0 评论 -
c++与java的优缺点
大多数程序员都认为C/C++会比Java语言快,甚至于觉得从Java语言诞生以来,“执行速度缓慢”的帽子就应当被扣在头顶,这种观点的出现是由于Java刚出现的时候JIT编译技术还不成熟,主要靠解释器执行的Java语言确实性能比较低下。但是在今天JIT编译技术已经发展成熟之后,Java语言有可能在速度上与C/C++争一日长短了吗?这个问题的答案,让我们从两者的编译器谈起。 Java与C/C...转载 2019-01-11 10:08:58 · 904 阅读 · 0 评论 -
java语言的优缺点
1、Java是纯面向对象的语言。《Java编程思想》中提到Java语言是一种“Everything is object”的语言,它能够直接反映现实生活中的对象,例如车、动物等,因此通过它编写程序更容易。2、平台无关性。Java语言可以“一次编译,到处执行”。无论是在Windows平台还是在Linux、MacOS等其他平台上对Java程序进行编译,编译后的程序在其他平台上都可以运行。由于Java...原创 2019-01-11 10:08:14 · 14079 阅读 · 2 评论 -
java类加载过程,java默认机制双亲委培机制
.java文件---(编译)-->.class文件(字节码文件)--->(jvm解释)---->二进制机器码jvm类加载过程为:1,装载,查找和导入Class文件.2,链接: 1,验证,确保Class文件中的二进制信息符合当前虚拟机的要求。 2,准备:为类变量分配内存并设置类变量初始值( 这时候分配内存和初始化的仅是static变量,实例变量需要在...转载 2018-12-07 09:50:51 · 243 阅读 · 0 评论 -
java运算符 与(&)、非(~)、或(|)、异或(^)
最近看HashMap源码,遇到了这样一段代码:1 static final int hash(Object key) {2 int h;3 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);4 }于是我整理学习了以下知识:1.十进制转二进制...原创 2018-11-22 14:48:04 · 15990 阅读 · 5 评论 -
android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
第一、四大组件间数据传递方式:启动四大组件通过Intent对象来实现,Intent的功能包括启动四大组件以及相关信息+传递数据。其中传递数据Intent提供了putExtra和对应的getExtra方法来实现:putExtra和getExtra 其实是和Bundle put和get方法一一对应的,在Intent类中有一个Bundle的mExtras成员变量所有的putExtra和g...原创 2018-08-30 09:28:53 · 610 阅读 · 0 评论 -
抽象类和接口
使用场景当需要使得多个类看起来一样时,使用接口或者抽象类。 例如:当有四个类,分别为Basketball,Football,Baseball,Badminton。这四个类都有的方法为play(),stop(),pause(),这时可以把这些方法抽象出来,在抽象类中或者接口中声明,再让这四个类继承或实现。这样这四个类看起来就一样了。抽象类首先记住一句话,抽象类的存在是为了被继承,如果没...原创 2018-08-16 21:47:57 · 448 阅读 · 0 评论 -
Java容器(三):容器总结
Java容器家族图容器从最大的概念来分:分为Collection和Map,区别就是Collection是一个槽的,Map是两个槽的(键值对)Collection划分为:List,Set,Queue List接口常见有:ArrayList,LinkedList,AbstractList, CopyOnWriteArrayList, Vector,Stack Set接口常见有:H...原创 2018-08-14 18:45:32 · 371 阅读 · 0 评论 -
Java容器(一):LinkedList
一、强大的LinkedListLinkedList是一个双向链表,而ArrayList是一个动态数组,这就造成了LinkedList不能够随机访问,查询时会遍历整个链表,因此在get和set时,不如ArrayList高效,但是在add和remove时,LinkedList则比较占优势(当然对于在list的最后增加或删除,两种List都一样)LinkedList很强大,它有一系列特定的方法,...原创 2018-08-14 10:52:26 · 116 阅读 · 0 评论 -
数组(二):渐析java的浅拷贝和深拷贝
首先来看看浅拷贝和深拷贝的定义: 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。 深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。这个方式称为深拷贝 也就是说浅拷贝只复制一个对象,传递引用,不能复制实例。而深拷贝对对象内部的引用均复制,...原创 2018-08-14 10:37:01 · 430 阅读 · 0 评论 -
数组(一):ArrayList的实现和Arrays类的使用
一、数组是否可以变长?我们都知道,数组时定长的,初始化时一定要给定长度,由于这个长度的问题,我们在实际的开发中,会更倾向于使用容器,如ArrayList等,使用容器类时,无需考虑长度问题,因为容器已经帮我们处理了,那么数组就没有办法变长了吗?当然不是,ArrayList就是基于数组实现的,我们可以看看ArrayList是如何处理的二、ArrayList的实现原理ArrayList用一个...原创 2018-08-14 10:31:52 · 878 阅读 · 0 评论 -
编程基础题
1.二维数组中的查找题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:第一种方法:把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案,时间复杂度是nlogn第二种方法:从左下角的元素开始比较,target大的话ro...原创 2018-08-14 09:46:23 · 423 阅读 · 0 评论 -
泛型知识:擦除,extend和super
一:擦除要理解super和extends的边界问题,首先要理解消除。 先看一个有趣的例子:public class Abrasion { public static void main(String[] args) { Class a = new ArrayList<Integer>().getClass(); Class b = n...原创 2018-08-10 11:24:23 · 1133 阅读 · 2 评论 -
泛型基础和作用
一:什么是泛型泛型是jdk5才引进的,泛型其实指得就是参数化类型,使得代码可以适应多种类型。像容器,List< T >,大量使用了泛型,它的主要目的之一就是用来指定容器要持有什么类型的对象。我认为,泛型的好处很多:1.保证了类型安全当没有使用泛型的情况下,创建了一个狗的列表,List dogs = new ArrayList,每次要往狗列表添加时,都要我们程序员去确定所添加...原创 2018-08-10 09:54:27 · 233 阅读 · 0 评论 -
Java容器(七):重新认识HashMap(Java1.8和Java1.7中HashMap的差异)
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。 简介Java为数据结构中的映射定义了一个接口java.util...转载 2018-08-15 14:34:30 · 1836 阅读 · 0 评论 -
Class对象
RTTI我们要知道,Java让我们在运行时识别对象和类信息,主要通过两种方式,一种就是传统的RTTI,另一种是反射(Reflection)。两者的区别是,RTTI是在编译时就获得了所有类型信息,而反射是在运行时发现和使用类的信息。 RTTI分为三种形式: 1:传统的类型转换,例如经典的Animal的子类上转时类型转换。 2:Class对象,通过查询Class对象可以获得运行时所需的信息。 ...转载 2018-08-15 14:44:13 · 203 阅读 · 0 评论 -
剖析Java内部类
说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指正。 请尊重...原创 2018-08-16 21:14:39 · 140 阅读 · 0 评论 -
认识内部类
问题引出public class Outter{ private int a = 0; private class Inner{ public int getA(){ return ++a; } } private Inner getInner(){ return new Inner...原创 2018-08-16 19:27:21 · 98 阅读 · 0 评论 -
Java对象克隆——浅克隆和深克隆的区别
在Java中对象的克隆有深克隆和浅克隆之分。有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的。基本数据类型存储在栈中,引用数据类型存储在堆中。什么是克隆克隆就是依据已经有的数据,创造一份新的完全一样的数据拷贝。实现克隆有多种方式,可以手工的new出一个新的对象,然后将原来的对象信息一个一个的set到新的对象中。还有就是使用clo...转载 2018-08-13 18:11:10 · 457 阅读 · 0 评论 -
编程题
1. 01串问题(网易内推批)如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: “1”,”10101”,”0101010”都是交错01串。 小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。输入描述:输入包括字符串s,s的长度length(1 ≤ lengt...原创 2018-08-13 16:39:52 · 153 阅读 · 0 评论 -
Java容器(六):从容器出发探讨hashCode和equals
一、容器中的hashcode和euqals Java容器框架中有List和Set,其中List允许有重复元素,而Set则不允许有重复元素,Set是如何处理这里重复元素的?肯定是与equals相关,通过迭代来equals()是否相等,但是当数据量大的时候,假如我们往HashSet中添加10000个元素,equals()10000次,效率岂不是很低?我们来看看HashSet是如何实现的 ...转载 2018-08-15 11:21:07 · 151 阅读 · 0 评论 -
Java容器(五):LinkedHashMap实现原理
从之前的LinkedList源码分析来看,带有Linked的,其实就是和双链表相关,毫无疑问,LinkedHashMap就是HashMap再多加一个双向链表,其内部的存储规则和HashMap是一样的,但是在迭代中,HashMap是无序的,LinkedHashMap是有序的 LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到...转载 2018-08-15 11:11:51 · 152 阅读 · 0 评论 -
Java容器(四):HashMap(Java 7)的实现原理
一、HashMap的定义和构造函数<span style="color:#000000"><code><span style="color:#000088">public</span> <span style="color:#000088">class</span> &转载 2018-08-15 10:47:34 · 85 阅读 · 0 评论 -
Java反射(Reflection)详解
认识反射前面说到,反射相对于RTTI的区别就是,反射是运行时发现和使用类的信息。 当我们使用一个位置类型的对象进行操作时,我们必须先加载那个类的Class对象,因此那个类的对象对于JVM来说,必须是可获取的,可以从本地,也可以从网络。然而,对于反射机制,.class在编译器是不可获得的,因此反射只能在运行时打开.class文件。所以,反射和Class是不可分割的。置于Class是什么,怎么...转载 2018-08-15 14:55:32 · 242 阅读 · 0 评论 -
Java中 CopyOnWriteArrayList 的使用
java中,List在遍历的时候,如果被修改了会抛出java.util.ConcurrentModificationException错误。看如下代码:import java.util.ArrayList;import java.util.List;public class Resource3 { public static void main(String[] arg...转载 2019-03-22 16:32:16 · 179 阅读 · 0 评论