当前位置 主页 > 网站技术 > 代码类 >

    java比较两个list是否相同equals的代码详解

    栏目:代码类 时间:2020-02-04 18:06

    比较两个list是否相同,一般我用数组自带的函数equals,如:

    public int updateTemplateByVO(ContentTemplateVO contentTemplateVO) throws Exception {
        int flag = 0;
        if (null == contentTemplateVO) {
          return flag;
        }
        //比较新编辑的模板参数是否与原有的参数相同
        //新的参数数组
        List<String> stringList = getParamListFromTemplateContent(contentTemplateVO);
        //旧的参数数组
        List<TContentTemplateParam> tContentTemplateParamList = selectTemplateParamsByTemplateId(contentTemplateVO.getId());
        List<String> paramList = new ArrayList<String>();
         //将从表里获取的数组重新整理成包含相同类型的list数组
        for (TContentTemplateParam contentParam : tContentTemplateParamList) {
          paramList.add(contentParam.getParamName());
        }
         //比较两个list
        Boolean sameSortFlag = stringList.equals(paramList);
        String content = contentTemplateVO.getSmsMsgContent();
        StringBuilder stringBuilder = new StringBuilder(content);
        //参数有修改则重新排序
        if (!sameSortFlag) {
          String newContent = rightSortForContentParam(contentTemplateVO.getSmsMsgContent());
          contentTemplateVO.setSmsMsgContent(newContent);
        }
        contentTemplateVO.setUpdateTime(DateUtil.getNowAsDate());
    
        TContentTemplate tContentTemplate = ModelCopyUtil.copy(contentTemplateVO, TContentTemplate.class);
        flag = tContentTemplateMapper.updateByPrimaryKeySelective(tContentTemplate);
        if (flag == 1 && (!sameSortFlag)) {
          //先删除对应模板的参数配置
          deleteContentTemplateParam(contentTemplateVO);
          //重新配置模板参数
          addContentTemplateParam(contentTemplateVO);
    
        }
        return flag;
      }

    内容扩展:

    Java的俩个list之间比较,判断是否一致的方法

    前文

    我看了一篇博客,是关于判断俩个list的。看完之后我觉得可能并不是很好。

    结合他的思路,我重新整理了一下代码。

    同时也看了看String中的equals的实现。

    import java.util.List;
     
    public class ListUtil {
      /**
       * 使用时,务必保证每个对象中实现了equals()方法。
       * 如果是自己写的类,比如,Dog,Cat这些的,请重写Object中的equals方法!
       *
       * @param aList 左右顺序无所谓
       * @param bList 左右顺序无所谓
       * @return 尽可能避免相同的情况
       */
      public static boolean equals(List aList, List bList) {
     
        if (aList == bList)
          return true;
     
        if (aList.size() != bList.size())
          return false;
     
        int n = aList.size();
        int i = 0;
        while (n-- != 0) {
          if (!aList.get(i).equals(bList.get(i)))
            return false;
          i++;
        }
     
        return true;
      }
    }
    

    代码过程
    首先判断俩个对象是否相同,如果相同,直接返回true。

    接着判断俩个的长度是否相同,相同才有比较的意义。

    依照size,对list进行遍历。这里是需要用到equals方法,所以在对自己写的一些实体类判断的时候,一定要记得实现覆写hashCode()和equals()方法!同时切记equals方法的传入参数为Object!否则会因为重载的原因,不调用你写的方法。

    最后,这个代码算法复杂度为n。

    以上就是本次介绍的全部相关知识点,感谢大家的学习和对IIS7站长之家的支持。