0

我无法弄清楚如何比较 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) {  

}
}
4

2 回答 2

2

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

于 2012-11-13T09:58:44.407 回答
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 );

干杯,

于 2012-11-13T09:59:25.513 回答