code: public static <T> Boolean isEqualList(List<T> list1, List<T> list2) {
  
          if (list1 == list2) {
              return Boolean.TRUE;
          } else if ((list1 == null) || (list2 == null) || (list1.size() != list2.size())) {
              return Boolean.FALSE;
          }
  
          final Iterator<T> itr1 = list1.iterator();
          final Iterator<T> itr2 = list2.iterator();
          Object obj1 = null;
          Object obj2 = null;
  
          while (itr1.hasNext() && itr2.hasNext()) {
              obj1 = itr1.next();
              obj2 = itr2.next();
  
              if (!(obj1 == null ? obj2 == null : Objects.equal(obj1, obj2))) {
                  return Boolean.FALSE;
              }
          }
  
          return !(itr1.hasNext() || itr2.hasNext());
      }
docs: Method based on
  {@link org.apache.commons.collections.ListUtils#isEqualList(java.util.Collection, java.util.Collection)} rewrote
  for performance reasons.
  <p>
  Basically employs {@link ObjectUtils#equals(Object)} instead of {@link #equals(Object)} since the first
  one checks identity before calling <code>equals</code>.
  
  @param <T>
  the type of the elements in the list.
  @param list1
  the first list, may be null
  @param list2
  the second list, may be null
  
  @return whether the lists are equal by value comparison