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

メソッドの最初の空でない行は代入ですStationsArrayListG7a = StationsArrayListG7;。これは、両方の変数が同じArrayListオブジェクトを参照するようになったことを意味します。

于 2012-11-13T09:58:44.407 に答える
1

2 つの異なる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 に答える