Java 对对象数组排序会引发长[]错误

Java 对对象数组排序会引发长[]错误,java,arrays,sorting,object,arraylist,Java,Arrays,Sorting,Object,Arraylist,我在跟踪调查 我有classagrinformasativosoverridingcompareTo()方法按riesgotottaldouble对我的类进行排序 public class AGRinformesActivos extends EntidadBase implements Comparable<AGRinformesActivos>{ private static final long serialVersionUID = -434141882104486

我在跟踪调查

我有class
agrinformasativos
overriding
compareTo()
方法按
riesgotottal
double对我的类进行排序

public class AGRinformesActivos extends EntidadBase implements Comparable<AGRinformesActivos>{

private static final long   serialVersionUID    = -4341418821044868087L;

private String                  tipoActivo          = "";
private String                  codigo              = "";
private String                  denominacion        = "";
private int                     idAmenaza           = 0;
private double                  impactoTotal        = 0;
private double                  riesgoTotal         = 0;
private int                     valorPendiente      = 0;
ArrayList<Double>               impactoCuali        = new ArrayList<Double>();
ArrayList<String>               impactoCuanti       = new ArrayList<String>();
ArrayList<Double>               riesgoCuali         = new ArrayList<Double>();
ArrayList<String>               riesgoCuanti        = new ArrayList<String>();
这是我的代码:

    ArrayList <AGRinformesActivos> datosTotal = new ArrayList<AGRinformesActivos>();
    List listadoActTotal = manager.dameListadoActivos( Integer.parseInt(info.getIdtipoActivo().trim()), info.getCodigo().trim());
for( Object o : listadoActTotal ) {
                fila = (List) o;                    
                String codigoActivo = fila.get( 0 ).toString();             
                // If exists we obtain, if not exists we create.
                if (activosDimension.containsKey( codigoActivo )){
                    // If exists, obtain from activosDimension
                    informesActivo = activosDimension.get( codigoActivo );
                }else{
                    informesActivo = new AGRinformesActivos();
                    activosDimension.put( codigoActivo, informesActivo );
                    // Al objeto le añado tipoActivo, idActivo y Denominación
                    String tipoActivo = manager.dameNombreTipoActivo(info.getIdtipoActivo());
                    informesActivo.setTipoActivo( tipoActivo );
                    informesActivo.setCodigo( codigoActivo );
                    informesActivo.setDenominacion( fila.get( 1 ).toString() );
                    }
                    // Add impactoTotal and riesgoTotal
                    informesActivo.setImpactoTotal( Double.parseDouble( fila.get( 2 ).toString() ) );
                    informesActivo.setRiesgoTotal( Double.parseDouble(fila.get( 3 ).toString() ) );
                }

                informesActivo.getImpactoCuali().add( Double.parseDouble(fila.get( 5 ).toString() ) );
                informesActivo.getRiesgoCuali().add( Double.parseDouble(fila.get( 6 ).toString() ) );

                String gradoImp = dameRangoEconGrado(Double.parseDouble(fila.get( 5 ).toString() ));
                String gradoRiesg = dameRangoEconGrado(Double.parseDouble(fila.get( 6 ).toString() ));              
                if(gradoImp.equals("") ){
                    gradoImp = dameRangoEconGrado(1);
                }
                informesActivo.getImpactoCuanti().add( gradoImp );
                if(gradoRiesg.equals( "" )){
                    gradoRiesg = dameRangoEconGrado(1);
                }
                informesActivo.getRiesgoCuanti().add( gradoRiesg );

                if (!datosTotaltemp.contains( informesActivo )){
                    datosTotaltemp.add( informesActivo );
                    datosTotal.add( informesActivo );
                }
            }
Arrays.sort(datosTotal);

...
我做错了什么
AgrinformasActivos
有一个静态长字符串。这就是问题所在吗?为什么?在我的比较中,我使用的是
riesgoTotal
的两倍


提前感谢您

数组。排序
无法对数组列表进行排序。尝试使用数组。排序不能对数组列表进行排序。尝试使用

您正在对集合而不是数组进行排序。尝试代替
Arrays.sort()

对集合而不是数组进行排序。尝试代替
Arrays.sort()

您的
datosTotal
引用是一个集合,而不是数组。因此,您不应该使用
数组
对其进行排序,而应该使用
集合。排序

为了提高效率,我还建议您使用

public int compareTo(AGRinformesActivos o) {
    return Double.compare(this.riesgoTotal,o.riesgoTotal);
}

而不是为每次比较创建两个新的双对象。

您的
datosTotal
引用是一个集合,而不是数组。因此,您不应该使用
数组
对其进行排序,而应该使用
集合。排序

为了提高效率,我还建议您使用

public int compareTo(AGRinformesActivos o) {
    return Double.compare(this.riesgoTotal,o.riesgoTotal);
}

而不是为每次比较创建两个新的双对象。

您是在对
集合进行排序,而不是对数组进行排序。尝试
Collections.sort()
而不是
Arrays.sort()
^^^,并提供
比较器的实现:
Collections.sort(datosTotal,新比较器…
;“类型数组中的方法sort(long[])不适用于参数(ArrayList)”!您使用
ArrayList
调用排序方法,但它需要
long[]
。还有……不要运行有编译错误的代码。@Keppil,已更改,现在可以正常工作。你能发布一个答案来给你打分吗?非常感谢,我没有看到。@Victor:当类实现
Comparable
时,不需要
比较器。
你是在排序
集合,而不是数组。试试e> Collections.sort()
而不是
Arrays.sort()
^^^,并提供
比较器的实现:
Collections.sort(datosTotal,新比较器…
;“类型数组中的方法sort(long[])不适用于参数(ArrayList)”!您使用
ArrayList
调用排序方法,但它需要
long[]
。还有……不要运行有编译错误的代码。@Keppil,已更改,现在可以正常工作。您能发布一个答案来给您打分吗?非常感谢,我没有看到。@Victor:当类实现
Comparable
时,不需要
比较器。
public int compareTo(AGRinformesActivos o) {
    return Double.compare(this.riesgoTotal,o.riesgoTotal);
}