- 浏览: 11801 次
- 性别:
- 来自: 北京
文章列表
有的时候程序要处理多种类型的交互,如果只使用单向的绑定支持,那么程序会变得相当复杂。比如,有A,B,C三种种类型互相比较,抽象出来的算法a.compete(b),可是a,b可以是A,B,C中的任意两种类型的互相比较,这就麻烦了。
java的动态绑定其实是一种单路分发,能动态确定a的类型,不能够动态绑定b的类型,传统的方法就是重载compete方法。代码繁琐,还有些丑。
多路分发是一种技巧,可以让代码优雅 :) ,用实现“锤子、剪刀、布”的程序为例子:
写道
import java.util.Random;public class RoShamBo{ static Rand ...
斐波纳挈数列,尽量用for循环实现而不是用递归。递归的效率低的吓人!
Main方法实现:
写道
public static void main(String[] args){ int n = Integer.parseInt(args.length == 0 ? "1" : args[0]); long t0 = System.currentTimeMillis(); long fb = fib(n); System.out.println("fb= " + fb); long t1 = System.current ...
首先,这个问题的最容易想到的就是冒泡排序。先把N个数存入数组中,之后 用冒泡算法从大到小排序,在取k位置的值。
具体求解过程如下:
import java.util.Random;
public class MaxK{
static int[] nums = new int[20];
static Random rand = new Random(4);
public static void main(String[] args){
int k = Integer.parseInt(args[0]);
init();
printNums( ...
import java.util.*;
class ReversibleArrayList<T> extends ArrayList<T> {
private static final long serialVersionUID = 7562533499281233061L;
public ReversibleArrayList(Collection<T> c) {
super(c);
}
public Iterable<T> reversed() {
return new Iterable<T ...
public class Main1 {
final static int MULTI_0 = 19;
final static int MULTI_1 = 27;
/**
* 字符串加密算法
* */
public static void main(String[] args) {
String t0 = "!@#$%!@#$%^&()_+HJkjk123j";
byte[] tb0 = t0.getBytes();
//加密的byte数组
byte[] temp = new byte[tb ...
HEX编码(Hexadecimal Code),也就是十六进制编码。
多字节的 HEX编码存储使用常见的 INTEL字节序方式(HEX(I))和MOTOROLA字节序方式(HEX(M))。 INTEL编码方式为大端字节序的方式,MOTOROLA编码方式为小端字节序的方式。
下面的代码之小端字节序转换成int的算法:
public static int byte2int(byte[] b) {
int res = 0;
int bLen = b.length;
if (bLen < 5) {// int 最大到4个字 ...
一、byte转换成bit字符串
final static char[] digits = { '0', '1' };
public static String toBinaryString(byte b) {
char[] buff = new char[8];
int charPos = 8;
do {
buff[--charPos] = digits[b & 1];
b >>>= 1;
} while (charPos > 0);
return new String(buff);
}
二、 ...