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

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]);
        }
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值