Java 比较两个arrayList并将结果存储在第三个arrayList中

Java 比较两个arrayList并将结果存储在第三个arrayList中,java,networking,Java,Networking,当我将telnet的java类的结果存储在arrayList中时,我想要比较2 这个类用于telnet关于路由器的信息,并给出路由器的所有接口,然后将它们存储在arrayList中 因此,我将router1的接口存储在myData1中,第二个存储在myData2中 我将比较第一个数组的接口是否与第二个数组相同,只需在结果myData数组中添加其中一个 但它给了我一些密码 public class Test { public static void main(String[] ar

当我将telnet的java类的结果存储在arrayList中时,我想要比较2 这个类用于telnet关于路由器的信息,并给出路由器的所有接口,然后将它们存储在arrayList中 因此,我将router1的接口存储在myData1中,第二个存储在myData2中 我将比较第一个数组的接口是否与第二个数组相同,只需在结果myData数组中添加其中一个 但它给了我一些密码

public class Test {

       public static void main(String[] args) {

    Connection conn = null;
     try { 
conn = DriverManager.getConnection("jdbc:mysql://localhost/mohammedia", "root", "123456"); 
String sql = "SELECT * FROM router;"; 
          Telnet_Interface telnet = new Telnet_Interface();
          Telnet_Interface telnet1 = new Telnet_Interface();
          Telnet_Interface telnet2 = new Telnet_Interface();
            PreparedStatement prest = conn.prepareStatement(sql);
            ResultSet res=prest.executeQuery();
            while(res.next()){
telnet1.Config(res.getString(1), "user", "passwd", res.getString(1));
telnet2.Config(res.getString(2), "user", "passwd", res.getString(2));
            }
           ArrayList myData=new ArrayList();
           ArrayList myData1=telnet1.getMyData();
           ArrayList myData2=telnet2.getMyData();
      boolean bool=false;            
  for(int i=0;i<myData1.size();i++)    
  {    
     for(int j=0;j<myData2.size();j++)    
    {
        if (myData2.get(j).equals(myData1.get(i)))
             {                
                bool=true; 
                //System.out.print("sdfsd");
             }

    if(!bool)
        {
            myData.add(myData2.get(j));
            //System.out.print("sdsd");
        }      
  }
  }
  for(int x=0;x<myData.size();x++)
  {
      System.out.print(myData.get(x));
  }

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

}
公共类测试{
公共静态void main(字符串[]args){
连接conn=null;
试试{
conn=DriverManager.getConnection(“jdbc:mysql://localhost/mohammedia“,”根“,”123456”);
String sql=“从路由器中选择*”;
Telnet_Interface Telnet=新的Telnet_Interface();
Telnet_接口telnet1=新的Telnet_接口();
Telnet_接口telnet2=新的Telnet_接口();
PreparedStatement prest=conn.prepareStatement(sql);
ResultSet res=prest.executeQuery();
while(res.next()){
telnet1.Config(res.getString(1),“user”,“passwd”,res.getString(1));
telnet2.Config(res.getString(2),“user”,“passwd”,res.getString(2));
}
ArrayList myData=新的ArrayList();
ArrayList myData1=telnet1.getMyData();
ArrayList myData2=telnet2.getMyData();
布尔布尔布尔=假;
对于(inti=0;i您可以使用这样的方法

list1.retainAll(list2)
在此方法之后,列表1将只包含列表2中可用的数据。

您可以这样使用方法

list1.retainAll(list2)
在此方法之后,列表1将仅包含列表2中可用的数据。

(不是答案)将所有数据分开。使用日志记录并处理异常

  • 如果这不是一种字典攻击,那么首先要做的是SQL使用密码检索用户

    • 关闭结果集、语句和连接
    • 检查结果
  • 然后获取telnet数据

    • 检查结果
  • 然后做比较

    • 我希望您能看到@StinePike删除的答案;他基本上建议
      list1.retainAll(list2)
      删除list1中出现在list2中的所有元素

  • 我想你应该做以下的事情。Outcommented是非循环的替代方案

    // Add all myData2 and myData1 elements but not twice to myData.
    
    // (1) Add myData2
    
    myData.addAll(myData2);
    
    // (2) Add myData1 when not in myData2
    
    //myData1.removeAll(myData1);
    //myData.addAll(myData1);
    for (int i = 0; i < myData1.size(); i++)    
    {    
        boolean found = false;
        for (int j = 0; j < myData2.size(); j++)    
        {
            if (myData2.get(j).equals(myData1.get(i)))
            {   
                found = true;
                break;             
            }
        }
        if (!found)
        {      
            myData.add(myData1.get(i));
        }
    }
    
    //向myData添加所有myData2和myData1元素,但不要添加两次。
    //(1)添加myData2
    myData.addAll(myData2);
    //(2)不在myData2中时添加myData1
    //myData1.removeAll(myData1);
    //myData.addAll(myData1);
    对于(int i=0;i
    (不是答案)将所有内容分开。使用日志记录并处理异常

  • 如果这不是一种字典攻击,那么首先要做的是SQL使用密码检索用户

    • 关闭结果集、语句和连接
    • 检查结果
  • 然后获取telnet数据

    • 检查结果
  • 然后做比较

    • 我希望您能看到@StinePike删除的答案;他基本上建议
      list1.retainAll(list2)
      删除list1中出现在list2中的所有元素

  • 我想你应该做以下的事情。Outcommented是非循环的替代方案

    // Add all myData2 and myData1 elements but not twice to myData.
    
    // (1) Add myData2
    
    myData.addAll(myData2);
    
    // (2) Add myData1 when not in myData2
    
    //myData1.removeAll(myData1);
    //myData.addAll(myData1);
    for (int i = 0; i < myData1.size(); i++)    
    {    
        boolean found = false;
        for (int j = 0; j < myData2.size(); j++)    
        {
            if (myData2.get(j).equals(myData1.get(i)))
            {   
                found = true;
                break;             
            }
        }
        if (!found)
        {      
            myData.add(myData1.get(i));
        }
    }
    
    //向myData添加所有myData2和myData1元素,但不要添加两次。
    //(1)添加myData2
    myData.addAll(myData2);
    //(2)不在myData2中时添加myData1
    //myData1.removeAll(myData1);
    //myData.addAll(myData1);
    对于(int i=0;i
    您使用
    .equals()
    ;您的
    远程接口是否实现
    .equals()
    .hashCode())
    正确吗?是否要将这两个列表的所有不同元素保留在一个单独的列表中?如果
    Telnet_Interface
    是用户定义的类,则重写该类中的
    equals
    方法..@VishalK和
    .hashCode()
    @VishalK,这不是思考与否的问题;如果不实现
    .hashCode())
    您打破了
    .equals()
    契约(两个相等的对象必须具有相同的哈希代码)。您使用
    .equals()
    ;您的
    TelnetInterface
    是否实现了
    .equals()
    .hashCode())
    正确吗?是否要将这两个列表的所有不同元素保留在一个单独的列表中?如果
    Telnet_Interface
    是用户定义的类,则重写该类中的
    equals
    方法..@VishalK和
    .hashCode()
    @VishalK,这不是思考与否的问题;如果不实现
    .hashCode())
    您破坏了
    .equals()
    契约(两个相等的对象必须具有相同的哈希代码)。即使
    retainal
    方法在内部使用
    equals
    方法,因此如果
    equals()
    未在类定义中被重写。不,我在myData1和myData2中有数据,但有些数据是相同的,因此我希望在myData中存储myData1和myData2的所有数据,但如果两个数组中的数据是相同的,则只存储一个,不包含repitition甚至
    retainal
    方法在内部使用
    equals
    方法,因此如果类定义中未重写
    equals()
    ,则不会保留任何意义。不,我在myData1中有数据,在myData2中有数据,但有些数据是相同的,因此我希望在我的