练习代码(八)对象的集合(一)

来源:互联网 发布:linux nslookup mx 编辑:程序博客网 时间:2024/06/05 21:11

1.封装改写一下Arrays类。
package second;

public interface Generator {
Object next();
}
package second;

public interface BooleanGenerator {
boolean next();
}
package second;

public interface ByteGenerator {
byte next();
}
package second;

public interface CharGenerator {
char next();
}
package second;

public interface DoubleGenerator {
double next();
}
package second;

public interface FloatGenerator {
float next();
}
package second;

public interface IntGenerator {
int next();
}
package second;

public interface LongGenerator {
long next();
}
package second;

public interface ShortGenerator {
short next();
}
在Arrays2类中实现:
package second;

import java.util.Random;

public class Arrays2 {

//定义8种基本类型的数组遍历.
public static String toString(boolean[] n) {
StringBuffer results = new StringBuffer(“[“); // 此时创建了一个对象
// String s = new String(“abc”); 此时创建了两个对象
for (int i = 0; i < n.length; i++) {
results.append(n[i]); // 使用StringBuffer类的append()方法添加元素
if (i < n.length - 1)
results.append(“,”);
}
results.append(“]”);
return results.toString(); // 将StringBuffer类转化成String类
}

public static String toString(byte[] n) {    StringBuffer results = new StringBuffer("[");    for (int i = 0; i < n.length; i++) {        results.append(n[i]);         if (i < n.length - 1)            results.append(",");    }    results.append("]");    return results.toString(); }public static String toString(char[] n) {    StringBuffer results = new StringBuffer("[");    for (int i = 0; i < n.length; i++) {        results.append(n[i]);         if (i < n.length - 1)            results.append(",");    }    results.append("]");    return results.toString(); }public static String toString(short[] n) {    StringBuffer results = new StringBuffer("[");    for (int i = 0; i < n.length; i++) {        results.append(n[i]);         if (i < n.length - 1)            results.append(",");    }    results.append("]");    return results.toString(); }public static String toString(int[] n) {    StringBuffer results = new StringBuffer("[");    for (int i = 0; i < n.length; i++) {        results.append(n[i]);         if (i < n.length - 1)            results.append(",");    }    results.append("]");    return results.toString(); }public static String toString(long[] n) {    StringBuffer results = new StringBuffer("[");    for (int i = 0; i < n.length; i++) {        results.append(n[i]);         if (i < n.length - 1)            results.append(",");    }    results.append("]");    return results.toString(); }public static String toString(float[] n) {    StringBuffer results = new StringBuffer("[");    for (int i = 0; i < n.length; i++) {        results.append(n[i]);         if (i < n.length - 1)            results.append(",");    }    results.append("]");    return results.toString(); }public static String toString(double[] n) {    StringBuffer results = new StringBuffer("[");    for (int i = 0; i < n.length; i++) {        results.append(n[i]);         if (i < n.length - 1)            results.append(",");    }    results.append("]");    return results.toString(); }private static Random r = new Random();

//重新定义fill()方法,使它可以不再单一赋值.

//String类型public static void fill(Object[] a , Generator gen ){    fill(a,0,a.length,gen);}public static void fill(Object[] a, int from, int to, Generator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandStringGenerator implements Generator{    private int len;    private RandCharGenerator cg = new RandCharGenerator();    public RandStringGenerator(int length){        len = length;    }    @Override    public Object next() {        // TODO Auto-generated method stub        char[] c = new char[len];        for(int i = 0; i < len; i++)            c[i] = cg.next();        return new String(c);    }}//Boolean类型public static void fill(boolean[] a , BooleanGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(boolean[] a, int from, int to, BooleanGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandBooleanGenerator implements BooleanGenerator{    @Override    public boolean next() {        // TODO Auto-generated method stub        return r.nextBoolean();    }}//Byte类型public static void fill(byte[] a , ByteGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(byte[] a, int from, int to, ByteGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandByteGenerator implements ByteGenerator{    @Override    public byte next() {        // TODO Auto-generated method stub        return (byte)r.nextInt();    }}//Char类型public static void fill(char[] a , CharGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(char[] a, int from, int to, CharGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}private static String ssource = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";private static char[] src = ssource.toCharArray();public static class RandCharGenerator implements CharGenerator{    @Override    public char next() {        // TODO Auto-generated method stub        return src[r.nextInt(src.length)];    }}//Short类型public static void fill(short[] a , ShortGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(short[] a, int from, int to, ShortGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandShortGenerator implements ShortGenerator{    @Override    public short next() {        // TODO Auto-generated method stub        return (short)r.nextInt();    }}//Int类型public static void fill(int[] a , IntGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(int[] a, int from, int to, IntGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandIntGenerator implements IntGenerator{    private int mod = 10000;    public RandIntGenerator(){}    public RandIntGenerator(int modulo){ mod = modulo; }    @Override    public int next() {        // TODO Auto-generated method stub        return r.nextInt(mod);    }}//Long类型public static void fill(long[] a , LongGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(long[] a, int from, int to, LongGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandLongGenerator implements LongGenerator{    @Override    public long next() {        // TODO Auto-generated method stub        return (long)r.nextInt();    }}//Float类型public static void fill(float[] a , FloatGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(float[] a, int from, int to, FloatGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandFloatGenerator implements FloatGenerator{    @Override    public float next() {        // TODO Auto-generated method stub        return (float)r.nextInt();    }}//Doouble类型public static void fill(double[] a , DoubleGenerator gen ){    fill(a,0,a.length,gen);}public static void fill(double[] a, int from, int to, DoubleGenerator gen){    for(int i = from;i<to;i++){        a[i] = gen.next();    }}public static class RandDoubleGenerator implements DoubleGenerator{    @Override    public double next() {        // TODO Auto-generated method stub        return (double)r.nextInt();    }}

}
2.测试封装的Arrays2类。
package first;
import java.util.Arrays;

import second.Arrays2;;

public class TestArrays2 {

public static void main(String[] args) {    int size = 6;    if(args.length != 0)        size = Integer.parseInt(args[0]);        if(size < 3){            System.out.println("arg must be >= 3");            System.exit(1);        }    //定义基本类型数组    boolean[] a1 = new boolean[size];    byte[] a2 = new byte[size];    char[] a3 = new char[size];    short[] a4 = new short[size];    int[] a5 = new int[size];    long[] a6 = new long[size];    float[] a7 = new float[size];    double[] a8 = new double[size];    //填充基本类型数组,并输出.    Arrays2.fill(a1, new Arrays2.RandBooleanGenerator());    System.out.println(Arrays2.toString(a1));    Arrays2.fill(a2, new Arrays2.RandByteGenerator());    System.out.println(Arrays2.toString(a2));    Arrays2.fill(a3, new Arrays2.RandCharGenerator());    System.out.println(Arrays2.toString(a3));    Arrays2.fill(a4, new Arrays2.RandShortGenerator());    System.out.println(Arrays2.toString(a4));    Arrays2.fill(a5, new Arrays2.RandIntGenerator());    System.out.println(Arrays2.toString(a5));    Arrays2.fill(a6, new Arrays2.RandLongGenerator());    System.out.println(Arrays2.toString(a6));    Arrays2.fill(a7, new Arrays2.RandFloatGenerator());    System.out.println(Arrays2.toString(a7));    Arrays2.fill(a8, new Arrays2.RandDoubleGenerator());    System.out.println(Arrays2.toString(a8));    //调用Arrays类的sort()方法对数组进行排序.    Arrays.sort(a5);    System.out.println("排序后:"+Arrays2.toString(a5));}

}
3.数组的比较。
package first;

import java.util.Arrays;

public class CompairArrays {

public static void main(String[] args){    String[] s1 = new String[5];    Arrays.fill(s1, "hi");    String[] s2 = {"hi","hi","hi","hi","hi"};    System.out.println(s1==s2);                // == 比较的是对象的引用    System.out.println(Arrays.equals(s1,s2));  // equals 比较的是对象}

}
4.数组的复制。
package first;

import java.util.Arrays;

class Arrays2 {

public static String toString(int[] n) {    StringBuffer results = new StringBuffer("["); //     此时创建了一个对象

// String s = new String(“abc”); 此时创建了两个对象
for (int i = 0; i < n.length; i++) {
results.append(n[i]); // 使用StringBuffer类的append()方法添加元素
if (i < n.length - 1)
results.append(“,”);
}
results.append(“]”);
return results.toString(); // 将StringBuffer类转化成String类
}

}

public class CopyingArrays {

public static void main(String[] args) {  // 基本类型数组    // 定义两个数组,并用Arrays类中的fill()方法填充数组.    int[] i = new int[7];    int[] j = new int[10];    Arrays.fill(i, 47);    Arrays.fill(j, 97);    // 调用Arrays2类中的toString()方法输出数组.    System.out.println(Arrays2.toString(i));    System.out.println(Arrays2.toString(j));    // 调用Java标准类库中static System.arraycopy()方法,来复制数组.    System.arraycopy(i, 0, j, 0, i.length);    System.out.println(Arrays2.toString(j));    int[] k = new int[5];    Arrays.fill(k, 105);    System.arraycopy(i, 0, k, 0, k.length);    System.out.println(Arrays2.toString(k));    Arrays.fill(k, 105);    System.arraycopy(k, 0, i, 2, k.length);    System.out.println(Arrays2.toString(i));  // 对象数组    // 调用Arrays.asList()方法将数组转化成List容器.    Integer[] u = new Integer[10];    Integer[] v = new Integer[5];    Arrays.fill(u, new Integer(23));    Arrays.fill(v, new Integer(86));    System.out.println(Arrays.asList(u));    System.out.println(Arrays.asList(v));    System.arraycopy(v, 0, u, 0, v.length);    System.out.println(Arrays.asList(u));}

}
5.返回一个数组并输出。
package first;

import java.util.Random;

public class IceCream {

public static final String[] flavors = { "a", "b", "c", "d", "e", "f", "g","h" };private static Random r = new Random();public static String[] flavorSet(int n) {    String[] results = new String[n];    boolean[] b = new boolean[flavors.length];    for (int i = 0; i < n; i++) {        int t;        do            t = r.nextInt(flavors.length);          while (b[t]);        results[i] = flavors[t];        b[t] = true;    }    return results;}public static void main(String[] args){    for(int i = 0; i < 20; i++){        System.out.println("flavorSet("+i+")=");        String[] fl = flavorSet(flavors.length);        for(int j = 0; j < fl.length; j++){            System.out.println("\t"+fl[j]);        }    }}

}

0 0
原创粉丝点击