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