Java Collection.sort不适用于我的数组

Java Collection.sort不适用于我的数组,java,arrays,list,sorting,collections,Java,Arrays,List,Sorting,Collections,我创建了自己的MyArrayList,但它无法排序。普通的Arraylist可以按集合排序。sort但我的不能。谁能告诉我哪里错了吗 import java.util.*; public class TestMyArrayList { public static void main(String[] args){ String[] subjects = {"EIE320", "EIE558", "EIE375", "EIE424"}; Integer[]

我创建了自己的MyArrayList,但它无法排序。普通的Arraylist可以按集合排序。sort但我的不能。谁能告诉我哪里错了吗

import java.util.*;

public class TestMyArrayList
{
    public static void main(String[] args){
        String[] subjects = {"EIE320", "EIE558", "EIE375", "EIE424"};
        Integer[] marks = {90,85,70,80};
        MyArrayList<String> sList = new MyArrayList<String>(subjects);
        Collections.sort(sList);
        sList.print();
        MyArrayList<Integer> mList = new MyArrayList<Integer>(marks);
        Collections.sort(mList);
        mList.print();
    }
}

public class MyArrayList<E> extends ArrayList<E>
    implements List<E>
{    
    private List<E> data;

    public MyArrayList()
    {
    }

    public MyArrayList(E[] inputdata){
        super();
        data = new ArrayList<E>();
        for(E e:inputdata){
            data.add(e);
        }
    }

    public void print(){
        for(Iterator iter = data.iterator();iter.hasNext();){
            System.out.print(iter.next() + " ");
        }

        System.out.println(" ");
    }
}
import java.util.*;
公共类TestMyArrayList
{
公共静态void main(字符串[]args){
字符串[]主题={“EIE320”、“EIE558”、“EIE375”、“EIE424”};
整数[]标记={90,85,70,80};
MyArrayList sList=新的MyArrayList(主题);
集合。排序(sList);
sList.print();
MyArrayList mList=新的MyArrayList(标记);
Collections.sort(mList);
mList.print();
}
}
公共类MyArrayList扩展了ArrayList
实施清单
{    
私人名单数据;
公共MyArrayList()
{
}
公共MyArrayList(E[]inputdata){
超级();
数据=新的ArrayList();
用于(E:输入数据){
数据.添加(e);
}
}
公开作废印刷品(){
for(迭代器iter=data.Iterator();iter.hasNext();){
System.out.print(iter.next()+);
}
System.out.println(“”);
}
}

MyArrayList的构造函数是错误的。由于您正在扩展
ArrayList
,因此不应在
MyArrayList
构造函数中创建另一个
ArrayList
实例。只需将元素添加到此
ArrayList

public MyArrayList(E[] inputdata){
    super();
    for(E e:inputdata){
        super.add(e);
    }
}
MyArrayList
实例上调用
Collections.sort()
时,它不会对
数据
成员
列表
进行排序

public MyArrayList(E[] inputdata){
    super();
    for(E e:inputdata){
        super.add(e);
    }
}
不需要您的
数据
成员。如果使用组合而不是继承,则只需要这样一个成员,在这种情况下,类不会扩展
ArrayList

public MyArrayList(E[] inputdata){
    super();
    for(E e:inputdata){
        super.add(e);
    }
}
您还应修改
打印方法:

public void print(){
    for(Iterator iter = iterator();iter.hasNext();){
        System.out.print(iter.next() + " ");

    System.out.println(" ");
}

如果您看到
Collections.java
的源代码,您将看到
Collections.sort
调用具体列表中定义的
sort
方法,在本例中,该方法是“MyArrayList.java”。您没有提供此方法,因此您的类从超级类
ArrayList.java
继承此方法。现在,如果您看到
ArrayList.java
的源代码,您将发现其中定义的
sort
方法执行对
对象[]elementData的排序过程。您尚未在
elementData
中设置数据(在
ArrayList.java
中定义)


您可以使用
public ArrayList(Collection只是一个提示,您可以使用
Arrays.asList()
,而不是在这里执行操作

    String[] subjects = {"EIE320", "EIE558", "EIE375", "EIE424"};
    ArrayList<String> sList = new ArrayList<String>(Arrays.asList(subjects));
String[]subjects={“EIE320”、“EIE558”、“EIE375”、“EIE424”};
ArrayList sList=新的ArrayList(Arrays.asList(subjects));

如果您将此作为练习来做,这很好,但是如果可能的话,我通常会避免重新编写
集合
类。

当您在列表中创建列表时,您有两个列表。有些方法使用一个列表,有些方法使用另一个。您需要使用调试器来查看这一点。我建议您使用委派(也就是说,不要扩展ArrayList)或者使用继承,但不要两者兼而有之。