// Make deepCopy != a if (size == 0)
deepCopy = new Object[] {"foo"}; elseif (deepCopy[deepCopy.length - 1] == null)
deepCopy[deepCopy.length - 1] = "baz"; else
deepCopy[deepCopy.length - 1] = null;
check(! Arrays.deepEquals(a, deepCopy));
check(! Arrays.deepEquals(deepCopy, a));
}
}
}
// Utility method to turn an array into a list "deeply," turning // all primitives into objects
List<Object> deepToList(Object[] a) {
List<Object> result = new ArrayList<Object>(); for (Object e : a) { if (e instanceofbyte[])
result.add(PrimitiveArrays.asList((byte[])e)); elseif (e instanceofshort[])
result.add(PrimitiveArrays.asList((short[])e)); elseif (e instanceofint[])
result.add(PrimitiveArrays.asList((int[])e)); elseif (e instanceoflong[])
result.add(PrimitiveArrays.asList((long[])e)); elseif (e instanceofchar[])
result.add(PrimitiveArrays.asList((char[])e)); elseif (e instanceofdouble[])
result.add(PrimitiveArrays.asList((double[])e)); elseif (e instanceoffloat[])
result.add(PrimitiveArrays.asList((float[])e)); elseif (e instanceofboolean[])
result.add(PrimitiveArrays.asList((boolean[])e)); elseif (e instanceof Object[])
result.add(deepToList((Object[])e)); else
result.add(e);
} return result;
}
// Utility method to do a deep copy of an object *very slowly* using // serialization/deserialization
Object deepCopy(Object oldObj) { try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(oldObj);
oos.flush();
ByteArrayInputStream bin = new ByteArrayInputStream(
bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bin); return ois.readObject();
} catch(Exception e) { thrownew IllegalArgumentException(e);
}
}
publicstaticlong[] longArray(int length) { long[] result = newlong[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextLong(); return result;
}
publicstaticint[] intArray(int length) { int[] result = newint[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextInt(); return result;
}
publicstaticshort[] shortArray(int length) { short[] result = newshort[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextShort(); return result;
}
publicstaticchar[] charArray(int length) { char[] result = newchar[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextChar(); return result;
}
publicstaticbyte[] byteArray(int length) { byte[] result = newbyte[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextByte(); return result;
}
publicstaticboolean[] booleanArray(int length) { boolean[] result = newboolean[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextBoolean(); return result;
}
publicstaticdouble[] doubleArray(int length) { double[] result = newdouble[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextDouble(); return result;
}
publicstaticfloat[] floatArray(int length) { float[] result = newfloat[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextFloat(); return result;
}
publicstatic Object[] flatObjectArray(int length) {
Object[] result = new Object[length]; for (int i = 0; i < length; i++)
result[i] = Rnd.nextObject(); return result;
}
// Calling this for length >> 100 is likely to run out of memory! It // should be perhaps be tuned to allow for longer arrays publicstatic Object[] nestedObjectArray(int length) {
Object[] result = new Object[length]; for (int i = 0; i < length; i++) { switch(rnd.nextInt(16)) { case0: result[i] = nestedObjectArray(length/2); break; case1: result[i] = longArray(length/2); break; case2: result[i] = intArray(length/2); break; case3: result[i] = shortArray(length/2); break; case4: result[i] = charArray(length/2); break; case5: result[i] = byteArray(length/2); break; case6: result[i] = floatArray(length/2); break; case7: result[i] = doubleArray(length/2); break; case8: result[i] = longArray(length/2); break; default: result[i] = Rnd.nextObject();
}
} return result;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.