入行Java不久,仅个人练习Java语言所记录,不足之处,请多指点。
1.13 设计一个泛型类Collection,它存储Object对象的集合(在数组中),以及该集合的当前大小。提供public 方法isEmpty,makeEmpty,insert,remove和isPresent。方法isPresent(X)当且仅当在该集合中存在(由equals定义)等于x的一个Object时返回true。
package org.my.excreise;
public class Excrise {
public static class Collection {
private Object[] objects;
public Object[] getObjects() {
return objects;
}
public void setObjects(Object[] objects) {
this.objects = objects;
}
public boolean isEmpty() {
if (objects.length == 0 || objects == null) {
return true;
} else {
return false;
}
}
public void makeEmpty() {
objects = null;
}
public void insert(Object object) {
int length = this.objects.length;
Object[] objects = new Object[length + 1];
System.arraycopy(this.objects, 0, objects, 0, length);// 复制元素
objects[length] = object;
this.objects=objects;
}
public void remove(int index) {
if (index < 0 || this.objects == null || this.objects.length == 0) {
return;
}
int length = this.objects.length;
if (index > length - 1) {
return;
}
if (length == 1) {
this.objects = new Object[] {};
}
Object[] objects = new Object[length - 1];
for (int i = 0; i < length; i++) {
if (i == index) {
continue;
}
if (i < index) {
objects[i] = this.objects[i];
} else {
objects[i - 1] = this.objects[i];
}
}
this.objects = objects;
}
public boolean isPresent(Object xObject) {
if (objects.length==0 || objects==null) {
return false;
}
for (Object object : objects) {
if (object.equals(xObject)) {
return true;
}
}
return false;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection collection=new Collection();
collection.setObjects(new Object[]{1,"12.5","我的博客"});
for (Object object : collection.getObjects()) {
System.out.println(object);
}
System.out.println("--------------------------");
collection.remove(1);
for (Object object : collection.getObjects()) {
System.out.println(object);
}
System.out.println("--------------------------");
collection.insert("csdn");
for (Object object : collection.getObjects()) {
System.out.println(object);
}
}
}
1.14 设计一个泛型类OrderdCollection,它存储Comparable的对象的集合(在数组中),以及该集合的当前大小。提供public方法isEmpty,makeEmpty,insert,remove,findMin和findMax。findMin和findMax分别返回该集合中最小的和最大的Comparable对象的引用(如果该集合为空,则返回null)
package org.my.excreise;
public class Excrise {
public static class OrderedCollection {
private Comparable[] comparables;
public Comparable[] getComparables() {
return comparables;
}
public void setComparables(Comparable[] comparables) {
this.comparables = comparables;
}
public boolean isEmpty() {
if (comparables.length==0 || comparables==null) {
return true;
}
else {
return false;
}
}
public void makeEmpty() {
comparables=new Comparable[]{};
}
public void insert(Comparable comparable) {
int length=this.comparables.length;
Comparable[] comparables=new Comparable[length+1];
System.arraycopy(this.comparables, 0, comparables, 0, length);
comparables[length]=comparable;
this.comparables=comparables;
}
public void remove(int index) {
if (index < 0 || this.comparables == null || this.comparables.length == 0) {
return;
}
int length = this.comparables.length;
if (index > length - 1) {
return;
}
if (length == 1) {
this.comparables = new Comparable[] {};
}
Comparable[] objects = new Comparable[length - 1];
for (int i = 0; i < length; i++) {
if (i == index) {
continue;
}
if (i < index) {
objects[i] = this.comparables[i];
} else {
objects[i - 1] = this.comparables[i];
}
}
this.comparables = objects;
}
public Comparable findMax() {
if (comparables.length==0 || comparables==null) {
return null;
}
int maxindex=0;
for (int i = 0; i < comparables.length; i++) {
if (comparables[i].compareTo(comparables[maxindex])>0) {
maxindex=i;
}
}
return comparables[maxindex];
}
public Comparable findMin() {
if (comparables.length==0 || comparables==null) {
return null;
}
int maxindex=0;
for (int i = 0; i < comparables.length; i++) {
if (comparables[i].compareTo(comparables[maxindex])<0) {
maxindex=i;
}
}
return comparables[maxindex];
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Comparable[] comparables=new Comparable[]{1,3,5,6,9};
OrderedCollection collection=new OrderedCollection();
collection.setComparables(comparables);
Comparable comparable=collection.findMax();
System.out.println(comparable);
}
}
1.15 定义一个Rectangle类,该类提供getLength和getWidth方法。利用图1-18中的findMax例程编写一种main方法,该方法创建一个Rectangle数组并首先找出面积最大的Rectangle对象,然后找出周长最大的Rectangle对象。
package org.my.excreise;
import java.math.BigDecimal;
public class Excrise {
public interface IMyCompare<T>
{
int CompareArea(T t1,T t2);
int CompareCirc(T t1,T t2);
}
public static class Rectangle
{
private float length=0f;
private float width=0f;
public float getLength() {
return length;
}
public void setLength(float length) {
this.length = length;
}
public float getWidth() {
return width;
}
public void setWidth(float width) {
this.width = width;
}
public float getArea()
{
BigDecimal b1=new BigDecimal(Float.toString(length));
BigDecimal b2=new BigDecimal(Float.toString(width));
float area=b1.multiply(b2).floatValue();
return area;
}
public float getCirc()
{
BigDecimal b1=new BigDecimal(Float.toString(length));
BigDecimal b2=new BigDecimal(Float.toString(width));
float circ=((b1.add(b2)).multiply(new BigDecimal(Float.toString(2.0f)))).floatValue();
return circ;
}
}
public static class Compare implements IMyCompare<Rectangle>
{
@Override
public int CompareArea(Rectangle t1, Rectangle t2) {
// TODO Auto-generated method stub
if (t1.getArea()>t2.getArea()) {
return 1;
}
else {
return 0;
}
}
@Override
public int CompareCirc(Rectangle t1, Rectangle t2) {
// TODO Auto-generated method stub
if (t1.getCirc()>t2.getCirc()) {
return 1;
}
else {
return 0;
}
}
}
public static <T> int[] findMax(T[] arr,IMyCompare<? super T> myCompare) {
int max1=0,max2=0;
for (int i = 0; i < arr.length; i++) {
if (myCompare.CompareArea(arr[i], arr[max1])==1) {
max1=i;
}
if (myCompare.CompareCirc(arr[i], arr[max2])==1) {
max2=i;
}
}
return new int[]{max1,max2};
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Rectangle[] aRectangles={new Rectangle(),new Rectangle(),new Rectangle()};
aRectangles[0].length=3.1f;
aRectangles[0].width=3.1f;
aRectangles[1].length=1.2f;
aRectangles[1].width=1.2f;
aRectangles[2].length=1.3f;
aRectangles[2].width=1.3f;
int[] arr=findMax(aRectangles, new Compare());
System.out.println("最大面积="+aRectangles[arr[0]].getArea()+",最大周长="+aRectangles[arr[1]].getCirc());
}
}