Think In Java
文章平均质量分 75
dai_
目前很懒
展开
-
CopyOnWriteArrayList/ConcurrentHashMap
Java 7之多线程并发容器 - CopyOnWriteArrayList转载 2014-03-18 09:26:46 · 574 阅读 · 0 评论 -
容器类常用方法(5)
EnumSet: 与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于int 的“位标志”的替换形式,具有高品质、类型安全的优势。实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能原创 2014-02-22 16:24:37 · 649 阅读 · 0 评论 -
泛型与数组
1. 不能创建持有泛型的数组对象。2. 不能创建泛型类型的数组 : 擦出类型,转换为Object[]测试代码:package array;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Arrays;import java.util.List;publi原创 2014-01-13 15:13:05 · 4462 阅读 · 3 评论 -
泛型的边界
java泛型的边界:在运行时,泛型被擦除,类型为原始类型。1. 中类型的丢失import java.util.ArrayList;public class TypeTest { public static void main(String[] args) { //泛型中的类型String,Integer在 Class c1 = new ArrayList().原创 2014-01-10 11:29:28 · 2800 阅读 · 0 评论 -
剪刀石头布游戏
1. 结果package cn.yjq.game;public enum Outcome { //赢,输,平 WIN, LOSE, DRAW;}2. Itempackage cn.yjq.game;import static cn.yjq.game.Outcome.*;public interface Item { Outcome compete(Item it)原创 2014-02-22 15:55:31 · 971 阅读 · 0 评论 -
可变参数重载的问题
package com.yjq.cn.initialize;/** * 可变参数 */public class VarArgsTest { static void fc(int i, String... str) { System.out.print("int : " + i + " "); for(String s : str) { System.out.prin原创 2013-11-17 21:15:27 · 1389 阅读 · 0 评论 -
Comparable&Comparator
ComparableComparable 此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作)。Comparator如果一个类不能实现Comparable接口,那么我们自己可以提供Comparator的排转载 2014-01-13 17:24:34 · 715 阅读 · 0 评论 -
享元模式-AbstractMap结构
享元模式: 共享数据的模式。例子:创建定制的Map-->FlyweightMap.1. 默认填充DATA元数据,避免每次使用FlyweightMap时创建新的数据。2. Map的数据结构package designpattern.flyweight;import java.util.AbstractMap;import java.util.AbstractSet;i原创 2014-01-14 16:16:35 · 1333 阅读 · 0 评论 -
动态代理
JDK的实现1. 实现InvocationHandler接口package reflect;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class DynamicProxyHandl原创 2013-12-23 09:58:00 · 877 阅读 · 0 评论 -
线程池helloworld
用线程池替代Thread,可对线程的创建、销毁、运行进行管理。1.Runnablepackage executor;public class LiftOff implements Runnable { protected int countDown = 10; private static int taskCount = 0; private final int id = t原创 2014-02-24 16:22:55 · 772 阅读 · 0 评论 -
hashCode()与equals()方法
Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系转载 2014-02-14 15:40:26 · 375 阅读 · 0 评论 -
Exchanger
Exchanger: 可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。 一个卖白粉(带毒品)的和一个买白粉(带钱)的人转载 2014-03-17 16:10:52 · 488 阅读 · 0 评论 -
CyclicBarrier
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。上个赛马的例子:package thread;import java.util.原创 2014-03-14 15:47:15 · 591 阅读 · 0 评论 -
CountDownLatch
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 实例代码:package thread;import java.util.Random;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util原创 2014-03-13 17:28:01 · 494 阅读 · 0 评论 -
死锁
public class Deadlock{ public static void main(String[ ] args) { final Object resource1 = "resource1"; final Object resource2 = "resource2"; int a=0; Thr转载 2014-03-13 16:06:38 · 481 阅读 · 0 评论 -
生产者_消费者2
使用BlockingQueue的实现:每个类只和BolckingQueue通信,代码解耦。 抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e, time, unit)移除remove()poll()take()poll(time, unit)检查element原创 2014-03-13 14:33:03 · 774 阅读 · 0 评论 -
生产者_消费者
线程之间,通过wait() notify() notifyAll()来协作编程;1. 必须在synchronized方法或方法块中使用2. 与Thread.sleep()的区别:wait()方法释放持有的对象的锁。3. 属于Object类的方法4. 替代类:java.util.concurrent.locks.Condition 接口5. 经典举例,生产者/消费者:餐馆有一个原创 2014-03-13 10:49:33 · 918 阅读 · 0 评论 -
多线程的几个细节
1. volatile关键字JAVA 多线程之~~volatile关键字2. 原子类:AtomicIntegerAtomicInteger的并发处理3. 线程本地存储(38)21.3.8 线程本地存储---Java编程思想之并发笔记4. 在阻塞时终结任务:ExecutorServiceshutdownNow :终结所有阻塞的任务转载 2014-03-12 11:39:43 · 511 阅读 · 0 评论 -
GZIP/ZIP压缩与解压缩
1. 用GZIP类可进行单文件的压缩及压缩包内容的读取package cn.yjq.interview;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOExce原创 2014-02-19 15:53:28 · 4367 阅读 · 0 评论 -
java获取文件路径
java中获取文件路径的几种方式转载 2014-02-17 16:46:11 · 565 阅读 · 0 评论 -
NIO(helloworld,字符编码,字节存放顺序)
直接上代码:package cn.yjq.interview;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;i原创 2014-02-18 16:06:28 · 1837 阅读 · 0 评论 -
全局变量与构造器初始化顺序
package com.yjq.cn.initialize;public class OrderOfInitial { public static void main(String[] args) { One one = new One(); System.out.println("先初始化参数,再初始化构造方法"); System.out.println("-------"原创 2013-11-17 22:07:03 · 1706 阅读 · 0 评论 -
泛型(1)_容器
1. 堆栈public class LinkedStack { private static class Node { private U item; private Node next; public Node() { item = null; next = null; } public Node(U item, N原创 2014-01-03 16:15:37 · 607 阅读 · 0 评论 -
final
package com.yjq.cn.initialize;import java.util.Random;public class FinalTest { public static void main(String[] args) { FinalData fd = new FinalData(23); System.out.println("编译期初始化: " + fd.原创 2013-11-18 22:11:13 · 732 阅读 · 0 评论 -
容器类常用方法(1)
1. 添加一组元素原创 2013-11-28 10:53:58 · 723 阅读 · 0 评论 -
iterator面向接口编程
场景:将对着List编写的代码应用到Set中,不修改代码创建一个display方法,不必知晓容器的确切类型。package com.yjq.collection;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import ja原创 2013-11-26 18:41:08 · 467 阅读 · 0 评论 -
枚举
package com.yjq.cn.initialize;public class EnumTest { //辣 public enum Spiciness { // 柔和 中等 炽烈 NOT, MILD, MEDIUM, HOT, FLAMING } public static void main(String[] args)原创 2013-11-17 10:59:16 · 650 阅读 · 0 评论 -
数组初始化
package com.yjq.cn.initialize;import java.util.Arrays;import java.util.Random;/** * 基本类型,引用类型初始化区别 * */public class ArrayInitial { public static void main(String[] args) { Random rand =原创 2013-11-17 21:29:34 · 728 阅读 · 0 评论 -
抽象类、接口、多态特性
1. 抽象类本身不能被实例化,可以没有抽象方法2. 父类与接口有相同的方法时,不会产生冲突,因为只会有一份方法的实现package com.yjq.cn.interfacepublic abstract class AbstractTest { int i = 10; public static int f(int i) { return ++i; }原创 2013-11-21 14:49:36 · 1917 阅读 · 0 评论 -
构造器与多态
1. 创建子类时,先构建父类2. 父类构造方法中调用eat方法3. 由于多态的原因,父类构造时调用了子类的eatpackage com.yjq.cn.polymorphism;public class AnimalConstuctors { public static void main(String[] args) { new Dog(4); } }class An原创 2013-11-19 19:43:12 · 734 阅读 · 0 评论 -
(3)正则补充
1. 量词的小细节,贪婪与懒惰2. find()/find(i)方法3. (?m) 单行模式 :标记的作用及用法(了解,用到时扩展)import java.util.regex.Matcher;import java.util.regex.Pattern;public class TestRegex { public static void main(Stri原创 2013-12-06 15:09:41 · 779 阅读 · 0 评论 -
容器类常用方法(3)
1. Map:key-value的映射关系package context;import java.util.HashMap;import java.util.Map;import java.util.Random;public class TestMap { public static void main(String[] args) { Random原创 2013-11-30 09:47:10 · 923 阅读 · 0 评论 -
泛型(3)_方法
泛型可以申明在方法上package generator;import java.util.ArrayList;import java.util.List;public class GenericMethod { public void f(T item) { System.out.println(item.getClass().getName());原创 2014-01-04 14:55:35 · 777 阅读 · 1 评论 -
泛型(2)_适配器
1. 定义一个生成器接口:package generator;public interface Generator { T next();}2. 实现类,用于生成Fibonacci数列:package generator;public class Fibonacci implements Generator { private int count原创 2014-01-04 10:12:22 · 1165 阅读 · 0 评论 -
容器类常用方法(2)
1. list:在Collection接口上增加大量方法,使得可以在List中间插入和移除元素。 a)ArrayList: 长于随即访问,在List中间插入、删除元素较慢。 b)LinkedList:通过较低的代价在List中间插入、删除元素,提供了优化的顺序访问;在随即访问方面比较慢,实现了更 多的特性方法。package context;import ja原创 2013-11-29 14:33:18 · 727 阅读 · 0 评论 -
接口与类型信息_reflect
Interface关键字的一个重要目标就是允许程序员隔离构件,降低耦合性。但是通过类型信息,这种耦合性还是会传递出去,见例子:1. 定义接口A:package reflect;public interface A { void f();}2. 实现类B:package reflect;public class B implements A { @O原创 2014-01-03 11:59:00 · 582 阅读 · 0 评论 -
Class获取_知识点
2种获取class的方式的区别1. Class.forName("")2. *.classpackage context;import java.util.Random;public class ClassInitialization { public static final Random rand = new Random(); public st原创 2013-12-17 11:15:04 · 585 阅读 · 0 评论 -
策略模式与外观模式
1.策略 :定义不同的算法族,并且之间可以互相替换;让算法的变化独立于使用算法的客户,以动态的改变对象的行为。2. 例子:随机生成宠物,并统计各种宠物生成数量。a) 抽象类:PetCreator,用于随机生成宠物。package context;import java.util.ArrayList;import java.util.Collections;import原创 2013-12-17 11:05:41 · 1878 阅读 · 1 评论 -
格式化字符串
Formatter类:printf 风格的格式字符串的解释程序。此类提供了对布局对齐和排列的支持,以及对数值、字符串和日期/时间数据的常规格式和特定于语言环境的输出的支持。支持诸如 byte、BigDecimal 和Calendar 等常见 Java 类型。1. 主要讲下字符串的格式化,上个例子:package string;import java.util.Formatter原创 2013-12-05 16:21:37 · 1408 阅读 · 0 评论 -
toString方法导致的递归调用
1. 在toString方法中使用this关键字,导致的递归,见代码:package string;public class InfiniteRecursion { @Override public String toString() { //this关键字会调用this.toString()方法,产生递归 //修改为super.toString() r原创 2013-12-02 16:45:00 · 1389 阅读 · 0 评论