Java 将刚刚创建的ArrayList与之前创建的ArrayList进行比较

Java 将刚刚创建的ArrayList与之前创建的ArrayList进行比较,java,arrays,arraylist,compare,Java,Arrays,Arraylist,Compare,我很难弄清楚如何比较ArrayList的每个单独值。为此,我在要填充的ArrayList之前分配了一个空ArrayList,但由于某种原因,当我运行该方法时,它会同时填充这两个ArrayList。你们有谁知道为什么吗?注意:这段代码没有进行比较,但我无法在第一时间填充它们来尝试进行比较 List<Long> StationsArrayListG7 = new ArrayList<>(); List<Long> StationsArrayListG7a = ne

我很难弄清楚如何比较ArrayList的每个单独值。为此,我在要填充的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);
       }  

  }  


  }    
List StationsArrayListG7=新建ArrayList();
List StationArrayListG7a=新的ArrayList();
public void GetApplicationSpecificUserStats(MBeanServerConnection服务器连接名){
StationsArrayListG7a=StationsArrayListG7;
字符串attrName=“当前”;
for(字符串stringName:gSelectedApplicationsFromFile){
试一试{
String connectsName=“WowzaMediaServerPro:vHosts=vHosts,vHostName=_defaultVHost_,”
+“应用程序=应用程序,applicationName=“+stringName+”,name=连接”;
ObjectName connectsObjName=新的ObjectName(connectsName);
试一试{
Long valueObj=(Long)serverConnectionName.getAttribute(connectsObjName,attrName);
valueX=valueObj;
StationsArrayListG7.add(valueX);
}捕获(MBeanException ex){
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE,null,ex);
}捕获(AttributeNotFoundException ex){
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE,null,ex);
}捕获(InstanceNotFoundException ex){
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE,null,ex);
}捕获(反射异常除外){
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE,null,ex);
}捕获(IOEX异常){
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE,null,ex);
System.out.println(“发生IOException错误!”);
}
}           
捕获(格式错误的ObjectNameException ex){
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE,null,ex);
}  
}  
}    
当我使用单个变量而不是数组时,效果很好。分配数组StationsArrayListG7a=StationsArrayListG7;时,我无法判断是否正确;。我试过复制之类的东西,但它总是给我空的

提前谢谢

更新:替换StationArrayListG7a=StationArrayListG7;使用StationsArrayListG7a.addAll(StationsArrayListG7);似乎有帮助。我还不是100%确定,虽然我写这篇文章,所以我需要做一些测试。如果还有什么你还知道的,请告诉我:D

UPDATE2:updateworks中提到的方法。我用来比较的代码如下:

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

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

}
}
for(int i=0;i=Array2.get(i)+difDrop){
}
}

方法中的第一个非空行是赋值
StationArrayListG7a=StationArrayListG7
这意味着两个变量现在引用相同的
ArrayList
对象。

方法中的第一个非空行是赋值
StationArrayListG7a=StationArrayListG7
这意味着两个变量现在引用相同的
ArrayList
对象。

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

List<Long> StationsArrayListG7 = new ArrayList<>();
List<Long> StationsArrayListG7a = new ArrayList<>();
如果要将一个
ArrayList
的内容复制到另一个,则有一个构造函数:

List<Long> StationsArrayListG7 = new ArrayList<>();
// put stuff in StationsArrayListG7
// ...
List<Long> StationsArrayListG7a = new ArrayList<>( StationsArrayListG7 );
List StationsArrayListG7=新建ArrayList();
//把东西放在StationsArrayListG7
// ...
List StationArrayListG7a=新的ArrayList(StationArrayListG7);

干杯,

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

List<Long> StationsArrayListG7 = new ArrayList<>();
List<Long> StationsArrayListG7a = new ArrayList<>();
如果要将一个
ArrayList
的内容复制到另一个,则有一个构造函数:

List<Long> StationsArrayListG7 = new ArrayList<>();
// put stuff in StationsArrayListG7
// ...
List<Long> StationsArrayListG7a = new ArrayList<>( StationsArrayListG7 );
List StationsArrayListG7=新建ArrayList();
//把东西放在StationsArrayListG7
// ...
List StationArrayListG7a=新的ArrayList(StationArrayListG7);

干杯,

旁注:尽量避免变量/属性的大写名称。您在何处(以及如何)声明/初始化
valueX
gSelectedApplicationsFromFile
?public long valueX=0;设置为全局变量。gSelectedApplicationsFromFile只是一个读取站点名称列表并作为数组列表返回的方法。此外,我尝试了下面的答案,但他们没有;好像不行。不确定我做错了什么注意:尽量避免变量/属性的大写名称。您在何处(以及如何)声明/初始化
valueX
gSelectedApplicationsFromFile
?public long valueX=0;设置为全局变量。gSelectedApplicationsFromFile只是一个读取站点名称列表并作为数组列表返回的方法。此外,我尝试了下面的答案,但他们没有;好像不行。不确定我做错了什么我在哪里写这段代码?List StationArrayListG7a=新的ArrayList(StationArrayListG7);似乎什么都不做,它总是返回空数组列表[]。问题是我需要事先分配数组列表。它的工作方式是:我分配一个空数组列表:StationArrayListG7a。用数据填充StationsArrayListG7,并将填充的数据与指定的数据进行比较。第一次它是空的,所以忽略它。之后,StationsArrayListG7a应该有值,我用新值填充StationsArrayListG7并再次比较。希望这是有意义的。这段代码的主要内容是,我想比较每个单独的值,以便监视更改。我无法监控是同时获得两个数组列表的相同值,还是始终获得一个空值。从您的代码片段中完全不清楚要在哪里比较这两个列表,甚至不清楚该方法是否可行。同时考虑两个列表的排序方式不同!嗨,安德斯,我所需要做的就是替换StationsArrayListG7a=StationsArrayListG7;使用StationsArrayListG7a.addAll(StationsArrayListG7);它是有效的。哟