我写了个集合类,用数组存放集合元素。可不知怎么写输出集合元素的方法,请各位帮下忙,谢谢!别的地方需要改进的也不妨说说。程序代码如下
public class SetTest
{
public static void main(String[] args)
{
// TODO 自动生成方法存根
IntSet set1 = new IntSet();
IntSet set2 = new IntSet();
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
System.out.println(set1.size());
System.out.println(set2.size());
}
}
class IntSet implements Cloneable
{
int [] data;
int manyItems;
public IntSet()
{
final int INITIAL_CAPACITY = 10;
manyItems = 0;
data = new int[INITIAL_CAPACITY];
}
public IntSet(int initialCapacity)
{
if(initialCapacity < 0)
throw new IllegalArgumentException
("The initialCapacity is negative: " + initialCapacity);
data = new int[initialCapacity];
manyItems = 0;
}
public void ensureCapacity(int minimumCapacity) {
int[ ] biggerArray;
if(data.length < minimumCapacity)
{
biggerArray = new int[minimumCapacity];
System.arraycopy(data, 0, biggerArray, 0, manyItems);
data = biggerArray;
}
}
public void add(int element)
{
if (manyItems == data.length)
{
ensureCapacity((manyItems + 1)*2);
}
data[manyItems] = element;
manyItems++;
}
public void addMany(int... elements)
{
if (manyItems + elements.length > data.length)
{ // Ensure twice as much space as we need.
ensureCapacity((manyItems + elements.length)*2);
}
System.arraycopy(elements, 0, data, manyItems, elements.length);
manyItems += elements.length;
}
public void addAll(IntSet addend)
{
ensureCapacity(manyItems + addend.manyItems);
System.arraycopy(addend.data, 0, data, manyItems, addend.manyItems);
manyItems += addend.manyItems;
}
public IntSet clone( )
{ // 复制一个 IntArrayBag 对象。
IntSet answer;
try
{
answer = (IntSet) super.clone( );
}
catch (CloneNotSupportedException e)
{
throw new RuntimeException
("This class does not implement Cloneable");
}
answer.data = data.clone( );
return answer;
}
public int getCapacity( )
{
return data.length;
}
public boolean remove(int target)
{
int index;
for (index = 0; (index < manyItems) && (target != data[index]); index++);
if (index == manyItems)
return false;
else
{
manyItems--;
data[index] = data[manyItems];
return true;
}
}
public int removeAll (int target)
{
int i = 0;
int count = 0;
while (i < manyItems)
{
if (data[i] == target)
{
manyItems--;
data[i] = data[manyItems];
count++;
}
else
i++;
}
return count;
}
public int size( )
{
return manyItems;
}
public void trimToSize( )
{
int[ ] trimmedArray;
if (data.length != manyItems)
{
trimmedArray = new int[manyItems];
System.arraycopy(data, 0, trimmedArray, 0, manyItems);
data = trimmedArray;
}
}
public static IntSet union(IntSet s1, IntSet s2)
{
IntSet answer = new IntSet(s1.getCapacity( ) + s2.getCapacity( ));
System.arraycopy(s1.data,0,answer.data,0,s1.manyItems);
System.arraycopy(s2.data,0,answer.data,s1.manyItems,s2.manyItems);
answer.manyItems = s1.manyItems + s2.manyItems;
return answer;
}
public static IntSet intersection(IntSet s1,IntSet s2)
{
IntSet answer = new IntSet(s1.getCapacity());
for(int i = 0;i < answer.getCapacity();i++)
{
if(s1.data[i] == s2.data[i])
{
answer.data[i] = s1.data[i];
}
else
{
s1.remove(i);
}
}
return answer;
}
public static IntSet difference(IntSet s1,IntSet s2)
{
IntSet answer = new IntSet(s1.getCapacity() + s2.getCapacity());
for(int i = 0;i < answer.getCapacity();i++)
{
if(s1.data [i] == s2.data[i])
{
s1.remove(i);
s2.remove(i);
}
else
{
answer.data[i] = s1.data[i];
answer.data[i+1] = s2.data[i];
}
}
return answer;
}
public void printSet()
{
}
}
public class SetTest
{
public static void main(String[] args)
{
// TODO 自动生成方法存根
IntSet set1 = new IntSet();
IntSet set2 = new IntSet();
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set1.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
set2.add((int)Double.parseDouble(new DecimalFormat("##.00").format(Math.random())));
System.out.println(set1.size());
System.out.println(set2.size());
}
}
class IntSet implements Cloneable
{
int [] data;
int manyItems;
public IntSet()
{
final int INITIAL_CAPACITY = 10;
manyItems = 0;
data = new int[INITIAL_CAPACITY];
}
public IntSet(int initialCapacity)
{
if(initialCapacity < 0)
throw new IllegalArgumentException
("The initialCapacity is negative: " + initialCapacity);
data = new int[initialCapacity];
manyItems = 0;
}
public void ensureCapacity(int minimumCapacity) {
int[ ] biggerArray;
if(data.length < minimumCapacity)
{
biggerArray = new int[minimumCapacity];
System.arraycopy(data, 0, biggerArray, 0, manyItems);
data = biggerArray;
}
}
public void add(int element)
{
if (manyItems == data.length)
{
ensureCapacity((manyItems + 1)*2);
}
data[manyItems] = element;
manyItems++;
}
public void addMany(int... elements)
{
if (manyItems + elements.length > data.length)
{ // Ensure twice as much space as we need.
ensureCapacity((manyItems + elements.length)*2);
}
System.arraycopy(elements, 0, data, manyItems, elements.length);
manyItems += elements.length;
}
public void addAll(IntSet addend)
{
ensureCapacity(manyItems + addend.manyItems);
System.arraycopy(addend.data, 0, data, manyItems, addend.manyItems);
manyItems += addend.manyItems;
}
public IntSet clone( )
{ // 复制一个 IntArrayBag 对象。
IntSet answer;
try
{
answer = (IntSet) super.clone( );
}
catch (CloneNotSupportedException e)
{
throw new RuntimeException
("This class does not implement Cloneable");
}
answer.data = data.clone( );
return answer;
}
public int getCapacity( )
{
return data.length;
}
public boolean remove(int target)
{
int index;
for (index = 0; (index < manyItems) && (target != data[index]); index++);
if (index == manyItems)
return false;
else
{
manyItems--;
data[index] = data[manyItems];
return true;
}
}
public int removeAll (int target)
{
int i = 0;
int count = 0;
while (i < manyItems)
{
if (data[i] == target)
{
manyItems--;
data[i] = data[manyItems];
count++;
}
else
i++;
}
return count;
}
public int size( )
{
return manyItems;
}
public void trimToSize( )
{
int[ ] trimmedArray;
if (data.length != manyItems)
{
trimmedArray = new int[manyItems];
System.arraycopy(data, 0, trimmedArray, 0, manyItems);
data = trimmedArray;
}
}
public static IntSet union(IntSet s1, IntSet s2)
{
IntSet answer = new IntSet(s1.getCapacity( ) + s2.getCapacity( ));
System.arraycopy(s1.data,0,answer.data,0,s1.manyItems);
System.arraycopy(s2.data,0,answer.data,s1.manyItems,s2.manyItems);
answer.manyItems = s1.manyItems + s2.manyItems;
return answer;
}
public static IntSet intersection(IntSet s1,IntSet s2)
{
IntSet answer = new IntSet(s1.getCapacity());
for(int i = 0;i < answer.getCapacity();i++)
{
if(s1.data[i] == s2.data[i])
{
answer.data[i] = s1.data[i];
}
else
{
s1.remove(i);
}
}
return answer;
}
public static IntSet difference(IntSet s1,IntSet s2)
{
IntSet answer = new IntSet(s1.getCapacity() + s2.getCapacity());
for(int i = 0;i < answer.getCapacity();i++)
{
if(s1.data [i] == s2.data[i])
{
s1.remove(i);
s2.remove(i);
}
else
{
answer.data[i] = s1.data[i];
answer.data[i+1] = s2.data[i];
}
}
return answer;
}
public void printSet()
{
}
}
代码我慢慢看!!
{
String str = "";
for(int i = 0; i < size(); i++)
{
str = str + "\n" + i + " : " + data[i];
}
return str;
}
但是你的程序好像在main方法中添加元素每次加的都是0
重写toString()方法可以
刚学没多久,写的时候只是写代码忽略了写注释,不好意思