- 浏览: 4412 次
最新评论
文章列表
我们知道TreeSet是Set接口下的一个实现类,TreeSet中的元素的排列顺序是和添加的顺序是没有关系的,并且它里面元素也是不能重复的
但是,TreeSet集合有它独有的特点,比如:
import java.util.*;
public class Test{
public static void main(String[] args){
TreeSet ts = new TreeSet();
ts.add("x");
ts.add("a");
ts.add("c& ...
- 2015-03-25 20:59
- 浏览 496
- 评论(0)
我们知道ArrayList是List接口的一个实现类,它的特点是查询效率高,增删效率低,线程不安全 原因是因为ArrayList底层是封装了一个数组,它是用数组实现的。
看下图,数组在内存中的存储方式:
现在定义一个int[] a数组,假设 ...
- 2015-03-23 18:41
- 浏览 492
- 评论(0)
所谓单例模式,就是让一个类在该类的外面只有一个实例
我们知道我们一旦把一个类给声明好了,它有多少个实例,取决于我们new多少次
那什么情况下能让一个类在该类的外面只有一个实例呢?
看下面代码:
class Foo{
private Foo(){}
}
public class Test{
public static void main(String[] args){
}
}
Ok,为了不让它在外面new,干脆把构造器设置为private,保证了不能new多个,但是一个没有也不合适!!
问题又出现了,这样做的结果是“没例模式”!!!
好吧,这样做虽然外面不 ...
- 2015-03-23 11:47
- 浏览 236
- 评论(0)
继上篇策略模式,可以引出一个叫做适配器模式的设计模式
先看下面的代码,还是上篇策略模式的代码段
interface Process{
public void process(File file);
}
public class Test{
public static void walkDir(Process p,File file){
File[] files = file.listFiles();
for(File ff : files){
if(ff.isDirectory()){
...
- 2015-03-23 11:31
- 浏览 258
- 评论(0)
其实策略模式,从字面意思上理解,类似于我想达到某一种效果时,不用去煞费苦心的再去想方法,而是已经做好的方法只要去调用就可以了
那么体现到java程序设计里,也可以这么理解,如果过程是随着参数的变化而变化的, ...
- 2015-03-22 23:58
- 浏览 581
- 评论(0)
前天有人问我说,我知道用Statement可能会产生注入问题,但是啥是注入问题?其实我知道他了解过,但是现在忘记了…..
谁说不是呢,我也是有些遗忘了,我就知道如果在sql语句后直接拼接条件,是可能产生注入问题 ,当然了如果你设置的条件是你想要,肯定不会出现注入问题的
话不多说,既然说到了注入问题,就去看看这个传说中的“注入问题”….
先让问题暴露出来,看下面的代码:
现在是这样,假设现在我的库里的数据是这样的:
1 黄药师 1900-1-1 400
2 黄晓明 1920-1-1 800
public class StatementTest{
publi ...
- 2015-03-22 21:35
- 浏览 325
- 评论(0)
今天继续学习一种叫做装饰器模式的设计模式。
当相对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有功能,提供加强功能。自定义的类称为装饰类
装饰类通常通过构造器接收被装饰的对象,并基于被装饰对象的功能,提供更强的功能 简单点说,就是这种模式是将已有对象的功能增强,并且以原对象已有的功能方法制作增强方法。好像越说越复杂了!!
比如,我们知道系统内置的BufferedReader类,是一个带缓冲的输入流,并且可以包装其他的节点流 ,它提供了一个readLine()方法,去提高效率,其实Reader是自带缓冲区的,默认是1024*8,即8192byte,而且不能改变,当多读一个字 ...
- 2015-03-21 11:32
- 浏览 294
- 评论(0)
java中大概有21种设计模式,先看第一种,模版方法设计模式。
从一个简单的例子引出模版方法设计模式:
用for、while、do-while三种循环分别测出1到100的和;
一般的写法是:
public class Test{
pubic static void main(String[] args){
// ...
- 2015-03-14 15:18
- 浏览 286
- 评论(0)
1、进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间。
2、线程:进程中的一个执行单元,负责进程中的程序的运行,一个进程中至少要有一个线程。一个进程中可以有多个线程的,这个应用程序也可以称 ...
- 2015-01-03 13:46
- 浏览 249
- 评论(0)
1、字符串都是对象。
2、字符串是常量。它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String 对象是不可变的,所以可以共享。
例如:String
str = "abc";等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
3、String
s1 =
- 2015-01-03 12:51
- 浏览 255
- 评论(0)
Stringstr=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?
相信大家对这道题并不陌生,答案也是众所周知的,2个。
接下来我们就从这道题展开,一起回顾一下与创建St ...
- 2015-01-03 10:32
- 浏览 339
- 评论(0)
问: 抽象类是否可继承实体类 (concrete class)
答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数
答案很明确,可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
关键在于这答案里所说的“前提是实体类必须有明确的构造函数”一句,是什么意思。
一般学习者会写的简单试验代码:
class A{}
abstract class B extends A{}
结果完全正常,编译通过。似乎和“实体类必须有明确的构造函数”完全没有关系。
这个问题涉及到两个个基础知识:
...
- 2015-01-03 10:09
- 浏览 601
- 评论(0)