将Just Created ArrayList与之前的ArrayList进行比较

时间:2012-11-13 09:56:59

标签: java arrays arraylist compare

我无法弄清楚如何比较ArrayList的每个单独值。我这样做是通过在ArrayList之前分配一个空的ArrayList来填充,但由于某种原因它在我运行该方法的同时填充了两个。你们有谁知道为什么?注意:此代码没有进行比较,但我无法在第一时间填写它们以尝试进行比较。

List<Long> StationsArrayListG7 = new ArrayList<>();
List<Long> StationsArrayListG7a = new ArrayList<>();


public void GetApplicationSpecificUserStats(MBeanServerConnection serverConnectionName) {

StationsArrayListG7a = StationsArrayListG7; 

String attrName = "current";   

for(String stringName : gSelectedApplicationsFromFile) {

     try {
           String connectsName = "WowzaMediaServerPro:vHosts=VHosts,vHostName=_defaultVHost_,"
                        + "applications=Applications,applicationName=" + stringName + ",name=Connections";       

           ObjectName connectsObjName = new ObjectName(connectsName);

           try {
           Long valueObj = (Long)serverConnectionName.getAttribute(connectsObjName, attrName);

           valueX = valueObj;        
           StationsArrayListG7.add(valueX);        

       } catch (MBeanException ex) {
           Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
       } catch (AttributeNotFoundException ex) {
           Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
       } catch (InstanceNotFoundException ex) {
           Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
       } catch (ReflectionException ex) {
           Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
       } catch (IOException ex) {
           Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
           System.out.println("IOException Error has occured!");
       }
       }           

       catch (MalformedObjectNameException ex) {
           Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
       }  

  }  


  }    

当我使用单个变量而不是数组时,它可以正常工作。如果我正确地分配数组StationsArrayListG7a = StationsArrayListG7;我无法弄明白。我试过复制和类似的东西,但它一直给我null。

提前致谢。

更新:更换StationsArrayListG7a = StationsArrayListG7;与StationsArrayListG7a.addAll(StationsArrayListG7);似乎有所帮助。我不是100%肯定,但是当我写这篇文章时,我需要做一些测试。如果您还有任何疑问,请告诉我:D

UPDATE2:UPDATE中提到的方法有效。我用来比较的代码是:

for (int i = 0; i < Array1.size(); i++) {

     if (Array1.get(i) >= Array2.get(i) + difDrop) {  

}
}

2 个答案:

答案 0 :(得分:2)

方法中的第一个非空行分配StationsArrayListG7a = StationsArrayListG7;,这意味着两个变量现在引用相同的ArrayList对象。

答案 1 :(得分:1)

您正在创建两个不同的ArrayList对象:

List<Long> StationsArrayListG7 = new ArrayList<>();
List<Long> StationsArrayListG7a = new ArrayList<>();

然后你扔掉一个并将一个分配给另一个,这意味着他们现在引用同一个对象......:

StationsArrayListG7a = StationsArrayListG7; 

如果您要将一个ArrayList内容复制到另一个,则有一个构造函数:

List<Long> StationsArrayListG7 = new ArrayList<>();
// put stuff in StationsArrayListG7
// ...
List<Long> StationsArrayListG7a = new ArrayList<>( StationsArrayListG7 );

干杯,