我试图将两个数组连接成新数组,按顺序排序,并交换两个索引值。
我是java的新手,之前只使用C,因此很难处理Object。
在main方法中,它声明了两个对象数组 IntVector vector = new IntVector(3);和IntVector vector2 = new IntVector(3);
如果类型是int [],我只能这样做,但我想用作对象 我应该如何编写concat,sort和swap方法?
公共类IntVector {
private int[] items_;
private int itemCount_;
private IntVector(int[] data, int n) {
items_ = data.clone();
itemCount_ = n;
}
public IntVector(int itemSize)
{
itemCount_ =0;
if(itemSize<1) itemSize =10;
items_ = new int[itemSize];
}
public void push(int value)
{
if(itemCount_ + 1 >= items_.length)
overflow();
items_[itemCount_++] = value;
}
public void log()
{
for (int i=0 ; i<itemCount_; ++i)
{
System.out.print(items_[i]);
if(i<itemCount_ -1)
System.out.println();
}
}
public void overflow()
{
int[] newItems = new int[items_.length * 2];
for(int i=0 ; i<itemCount_; ++i)
{
newItems[i] = items_[i];
}
items_=newItems;
}
public int getValue(int index)
{
if(index < 0 || index >= itemCount_)
{
System.out.println("[error][IntVector][setValue] Incorrect index=" + index);
return 0;
}
return items_[index];
}
public void setValue(int index, int value)
{
if(index < 0 || index >= itemCount_)
{
System.out.println("[error][IntVector][setValue] Incorrect index=" + index);
return ;
}
items_[index] = value;
}
public IntVector clone()
{
return new IntVector(items_, itemCount_);
}
public IntVector concat()
{
return null;
}
public IntVector sort()
{
return null;
}
public IntVector swap()
{
return null;
}
public static void main(String[] args)
{
IntVector vector = new IntVector(3);
IntVector vector2 = new IntVector(3);
vector.push(8);
vector.push(200);
vector.push(3);
vector.push(41);
IntVector cloneVector = vector.clone();
vector2.push(110);
vector2.push(12);
vector2.push(7);
vector2.push(141);
vector2.push(-32);
IntVector concatResult = vector.concat(vector2);
IntVector sortResult = concatResult.sort();
IntVector swapResult = sortResult.clone();
//swapResult.swap(1,5);
System.out.print("vector : "); vector.log();
System.out.print("\n\ncloneVector : "); cloneVector.log();
System.out.print("\n\nvector2 : "); vector2.log();
System.out.print("\n\nconcatvector : "); concatResult.log();
System.out.print("vector : "); vector.log();
System.out.print("vector : "); vector.log();
}
}
答案 0 :(得分:2)
Apache Commons库有ArrayUtils,您可以使用它来连接数组。
要对数组进行排序,您可以使用Arrays.sort(),它是标准SDK的一部分。如果要自定义排序
,则one有一个比较器要交换您的方法不需要参数,所以我不确定您想要交换哪个元素。如果你想要两个指标中的元素你可以做
private swap (int pos1, int pos2) {
//do some checking to ensure pos1 and pos2 exist here...
int tmp = items_[pos1];
items_[pos1] = items_[pos2];
items_[pos2] = tmp;
}
但正如大家所说,我也建议使用Collections框架。它将使连接更加简单。并且有专门的swap方法
我刚刚发现how-to-concatenate-two-arrays-in-java可能有助于连接。
答案 1 :(得分:1)
如果您真的想以典型的Java方式完成所有这些操作,则需要以下内容:
a)创建两个用必要值初始化的int
数组。
b)使用List
实用程序类将两个数组转换为Arrays
。请参阅asList()
方法。
c)创建一个ArrayList
并将以上两个列表添加到其中。请参阅addAll()
方法。
d)根据自然顺序对此List
进行排序。请参阅Collections.sort()
方法或创建自己的Comparator
并应用排序。
e)使用toArray(T[] t)
方法将List
转换为int数组。
你得到的最后一个int
数组应该是最终结果。
正如@owlstead评论的那样,使用Java Collections API比自己进行低级操作数组简单得多。