Java并发

    继续阅读
MXlwq's avatar
MXlwq 10月 27, 2016
 | 

Gson

Json json官网上面还有很多各种语言的相关链接 JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。     继续阅读
MXlwq's avatar
MXlwq 7月 12, 2016
 | 

Java单例设计模式

20160607更新 分类懒汉式12345678910//所谓“懒汉式”是在你真正用到的时候才去建这个单例对象:public class Single{ private Single(){};//构造函数私有化,防止其他类创建对象 private static Single s = null; public static Single getInstance(){//对外提供一个获取对象的方法 if(s == null) s = new Single(); //懒汉式做法 return s; }} 饿汉式12345678//所谓“饿汉式”是在不管你用的用不上,一开始就建立这个单例对象:比如:有个单例对象public class Single{ private Single(){}; private static Single s = new Single(); //建立对象 public static Single getInstance(){ return s;//直接返回单例对象 }}     继续阅读
MXlwq's avatar
MXlwq 6月 07, 2016
 | 

Java多线程

20160505修改部分代码20160506添加进程同步 继承Thread类123456789101112131415161718192021class Thread1 extends Thread { public void run() { int ticket = 5; while (ticket > 0) System.out.println(Thread.currentThread().getName() + "剩余" + (ticket--)); }}public class Main { public static void main(String[] args) { Thread1 mTh1 = new Thread1(); Thread1 mTh2 = new Thread1(); mTh1.start(); mTh2.start(); }} 运行结果:Thread-1剩余5Thread-1剩余4Thread-1剩余3Thread-1剩余2Thread-0剩余5Thread-1剩余1Thread-0剩余4Thread-0剩余3Thread-0剩余2 Thread-0剩余1一个继承了Thread的类的实例对象,无论调用多少次start方法,结果都只有一个线程在运行     继续阅读
MXlwq's avatar
MXlwq 5月 01, 2016
 | 

Java I/O操作

Java的IO类操作主要包括如下几类 字节操作流:OutputStream、InputStream字符操作流:Reader、Writer对象序列化:serializable 字节/字符操作流 字节输出流OutputStream 字节输入流InputStream 字符输出流Write 字符输入流Reader 字节流和字符流的区别(重点)字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。 转换流:在IO中还存在一类是转换流,将字节流转换为字符流,同时可以将字符流转化为字节流。 12OutputStreamWriter(OutStream out);//将字节流以字符流输出。InputStreamReader(InputStream in);//将字节流以字符流输入。 打印流 PrintStream在操作中要求输出信息时,可以采用PrintStream进行输出,它包括PrintWrite和PrintReader     继续阅读
MXlwq's avatar
MXlwq 4月 21, 2016
 | 

HashSet/TreeSet/LinkedHashSet

Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象。 HashSetHashSet有以下特点不能保证元素的排列顺序,顺序有可能发生变化不是同步的(线程不安全)集合元素可以是null,但只能放入一个null当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相等注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对 象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算 hashCode的值。 LinkedHashSetLinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。 TreeSet类TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0 自然排序自然排序使用要排序元素的CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。obj1.compareTo(obj2)方法如果返回0,则说明被比较的两个对象相等,如果返回一个正数,则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。如果我们将两个对象的equals方法总是返回true,则这两个对象的compareTo方法返回应该返回0实现了Comparable方法之后可以使用Arrays类的sort()方法进行排序。 定制排序自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator接口,实现 int compare(T o1,T o2)方法代码请点击↓”阅读全文”     继续阅读
MXlwq's avatar
MXlwq 4月 18, 2016
 | 

Java类集框架

java集合框架的内容 java集合框架的层次结构 使用Collection接口定义的公用方法对集合和线性表操作 使用Iterator接口遍历集合 使用JDK的增强for循环替代迭代Iterator进行集合遍历 熟悉Set接口,了解何时及如何使用HashSet,LinkedHashSet或TreeHashSet来存储元素 使用Comparator接口来比较元素 熟悉List接口,了解何时以及如何使用ArrayList或者LinkedList来存储元素 区分Vector与ArrayList,并了解如何使用Vector和Stack 使用JDK1.5的一般类型来简化程序设计 理解Collection和Map的区别,知道何时及如何使用HashMap,LinkedHashMap,TreeHashMap来存储 使用Collections类中的静态方法 使用Arrays类中的静态方法 java集合架构支持3种类型的集合:规则集(Set),线性表(List),图(Map),分别定义在Set,List,Map中。Set实例存储一组互不相同的元素(集合),List实例存储一组顺序排列的元素(表),Map存储一组 Key–Value的映射 总的架构如下,非常重要,包含继承关系,实现的分类,一目了然: Collection接口: Set接口: HashSet具体类 LinkedHashSet具体类 TreeSet具体类 List接口:  ArrayList具体类 LinkedList具体类 Vector具体类 Stack具体类 Map接口: HashMap类 LinkedHashMap类 TreeMap类                  Collection接口,它是处理对象集合的根接口,提供了一些公用方法,size,Iterator,add,remove Set和List接口都扩展自Collection,Set不允许重复。List就像一个表,可以重复,元素在表里有序放着。 Set接口的3种实现:  HashSet的对象必须实现hashCode方法,javaAPI大多数类实现了hashCode方法。  LinkedHashSet实现了对HashSet的扩展,支持规则集内元素的排序,在HashSet中元素是没有顺序的,而在LinkedHashSet中,可以按元素插入集合的顺序进行提取  TreeSet保证集中的元素是有序的,有2种方法可以实现对象之间的可比较性: 添加到TreeSet的对象实现了Comparable接口; 给规则集的元素指定一个比较器(Comparator)     继续阅读
MXlwq's avatar
MXlwq 4月 18, 2016
 | 

C/C++指针

例子int p; ///这是一个普通的整型变量int p; ///首先从P处开始,先与结合,所以说明P是一个指针,然后再与int结合,说明指针所指向的内容的类型为int型.所以P是一个返回整型数据的指针int p[3]; ///首先从P处开始,先与[]结合,说明P是一个数组,然后与int结合,说明数组里的元素是整型的,所以P是一个由整型数据组成的数组int p[3]; ///首先从P处开始,先与[]结合,因为其优先级比高,所以P是一个数组,然后再与结合,说明数组里的元素是指针类型,然后再与int结合,说明指针所指向的内容的类型是整型的,所以P是一个由返回整型数据的指针所组成的数组int (p)[3]; ///首先从P处开始,先与结合,说明P是一个指针然后再与[]结合(与”( )”这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int结合,说明数组里的元素是整型的.所以P是一个指向由整型数据组成的数组的指针int **p; ///首先从P开始,先与结合,说是P是一个指针,然后再与结合,说明指针所指向的元素是指针,然后再与int结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就不考虑多级指针了,最多只考虑一级指针.int p(int); ///从P处起,先与( )结合,说明P是一个函数,然后进入( )里分析,说明该函数有一个整型变量的参数然后再与外面的int结合,说明函数的返回值是一个整型数据Int (p)(int); ///从P处开始,先与指针结合,说明P是一个指针,然后与( )结合,说明指针指向的是一个函数,然后再与( )里的int结合,说明函数有一个int型的参数,再与最外层的int结合,说明函数的返回类型是整型,所以P是一个指向有一个整型参数且返回类型为整型的函数的指针int (p(int))[3]; ///从P开始,先与( )结合,说明P是一个函数,然后进入( )里面,与int结合,说明函数有一个整型变量参数,然后再与外面的结合,说明函数返回的是一个指针,,然后到最外面一层,先与[]结合,说明返回的指针指向的是一个数组,然后再与结合,说明数组里的元素是指针,然后再与int结合,说明指针指向的内容是整型数据.所以P是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针变量的函数. 细说指针指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的 类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。先声明几个指针放着做例子:例一:  (1)intptr;  (2)charptr;  (3)int*ptr;  (4)int(ptr)[3];  (5)int(ptr)[4]; 指针的类型  从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:  (1)intptr;///指针的类型是int  (2)charptr;///指针的类型是char  (3)intptr;///指针的类型是int  (4)int(ptr)[3];///指针的类型是int()[3]  (5)int(ptr)[4];///指针的类型是int()[4]   指针所指向的类型  当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。  从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符去掉,剩下的就是指针所指向的类型。例如:  (1)intptr; ///指针所指向的类型是int  (2)charptr; ///指针所指向的的类型是char  (3)int**ptr; ///指针所指向的的类型是int  (4)int(ptr)[3]; ///指针所指向的的类型是int( )[3]  (5)int(ptr)[4]; ///指针所指向的的类型是int( )[4]  在指针的算术运算中,指针所指向的类型有很大的作用。  指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的”类型”这个概念分成”指针的类型”和”指针所指向的类型”两个概念,是精通指针的关键点之一。 指针的值—-或者叫指针所指向的内存区或地址指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。 指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里?(重点注意) 指针本身所占据的内存区  指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针本身占据了4个字节的长度。  指针本身占据的内存这个概念在判断一个指针表达式(后面会解释)是否是左值时很有用。     继续阅读
MXlwq's avatar
MXlwq 4月 07, 2016
 | 

Java反射机制

今天看到Android中的Intent的方法原形,突然想起了Java的反射机制,记录一下吧首先说一下什么是反射:其实很容易明白,条件反射大家都很熟悉,而Java中的反射就是对于一个类,能够知道类的方法和属性,对于任意一个对象,都能调用它的任意一个方法,这种动态获取的信息以及动态调用对象的功能成为Java的反射机制。     继续阅读
MXlwq's avatar
MXlwq 3月 29, 2016
 | 

String运用正则表达式

正则标记字符x 表示一个置顶的字符,如a 表示一个字母a\\ 表示一位字符”\”\n 换行     继续阅读
MXlwq's avatar
MXlwq 3月 19, 2016
 |