equals方法

equals(Object o) 方法用来比较指定的对象与列表是否相等,当且仅当指定的对象也是一个列表、两个列表有相同的大小,并且两个列表中的所有相应的元素对相等时才返回 true。换句话说,如果所定义的两个列表以相同的顺序包含相同的元素,那么它们是相等的。该定义确保了 equals 方法在 List 接口的不同实现间正常工作。虽然equals方法并不常用,但是通过下面的例子可以了解一下:

 /**
* @ClassName: TestListAdd
* @Description: TODO(测试List的equals()方法)
* @author hoojjack
* @date 2017年5月12日 上午11:37:06
*
*/
public class TestListAdd {
private String name; public TestListAdd() { } public TestListAdd(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public static void main(String args[]){
TestListAdd test =new TestListAdd("hujian");
List<TestListAdd> list = new ArrayList<TestListAdd>();
List<TestListAdd> list1 = new ArrayList<TestListAdd>();
list.add(test);
System.out.println("name="+test.getName());
//list.add(new TestListAdd());
test.setName("hoojjack");
list1.add(test);
System.out.println("name="+test.getName());
//list1.add(new TestListAdd());
System.out.println(list.equals(list1)); } }

测试结果:

 name=hujianjie
name=hoojjack
true

通过上面的代码与打印结果可以了解到:无论实现是否相同,只要是List的元素顺序和值相同,equals方法就认为两个比较对象相同,也就是说equals比较的是List中的元素而不是实现对象本身(list1,list2),这与String的equals方法类似。

如果将上面注释掉的33/37行代码放开,则测试的equals()返回为false。从结果发现两个列表各新增了一个同类型的对象,因此比较的是list中的对象的引用是否相同。

ListIterator方法:

 public static void main(String args[]){
TestListAdd test =new TestListAdd("hujian");
List<TestListAdd> list = new ArrayList<TestListAdd>();
List<TestListAdd> list1 = new ArrayList<TestListAdd>();
list.add(test);
list.add(new TestListAdd("123"));
test.setName("hoojjack");
list1.add(test);
list1.add(new TestListAdd("456"));
ListIterator<TestListAdd> listIterator = list.listIterator();
//位置1
while(listIterator.hasPrevious()){
System.out.println(listIterator.previous().name);
}
//位置2
while(listIterator.hasNext()){
System.out.println(listIterator.next().name);
}
}

结果:

 hoojjack
123

如果将listIterator.hasPrevious()放在位置1处,listIterator.has()放在位置2处,则会出现上述结果,也就是list.listIterator()每次返回list列表的起始位置,因此先调用hasPrevious()将返回false。如果想要上面的hasPrevious()能输出结果,可以在位置1处先调用listIterator = list.listIterator(list.size());获得list列表的最后一个元素的游标。

 public static void main(String args[]){
TestListAdd test =new TestListAdd("hujian");
List<TestListAdd> list = new ArrayList<TestListAdd>();
List<TestListAdd> list1 = new ArrayList<TestListAdd>();
list.add(test);
list.add(new TestListAdd("123"));
test.setName("hoojjack");
list1.add(test);
list1.add(new TestListAdd("456"));
ListIterator<TestListAdd> listIterator = list.listIterator();
//位置1
while(listIterator.hasNext()){
System.out.println(listIterator.next().name);
}
//位置2
while(listIterator.hasPrevious()){
System.out.println(listIterator.previous().name);
}
}

结果:

 hoojjack
123
123
hoojjack

Java.Util.List(List接口)的更多相关文章

  1. java.util.Map.Entry接口

    java.util.Map.Entry接口主要就是在遍历map的时候用到,给你个例子:package test;import java.util.*;import java.util.Map.Entr ...

  2. 在java.util中有EventListener接口:所有事件监听者都要实现这个接口。

    在java.util中有EventListener接口:所有事件监听者都要实现这个接口. java.util中有EventObject类:所有的事件都为其子类.   事件范例在\CoreJava\Gi ...

  3. 做Webservice时报错java.util.List是接口, 而 JAXB 无法处理接口。

    Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExc ...

  4. Java 并发工具包 java.util.concurrent 用户指南

    1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...

  5. Java并发编程-并发工具包(java.util.concurrent)使用指南(全)

    1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...

  6. java基础知识回顾之java Thread类学习(八)--java.util.concurrent.locks(JDK1.5)与synchronized异同讲解

    看API文档介绍几个方法:  JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock                    2.接口Conditio ...

  7. 源码(03) -- java.util.Collection<E>

     java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...

  8. 源码(05) -- java.util.AbstractCollection<E>

    java.util.AbstractCollection<E> 源码分析(JDK1.7) ------------------------------------------------- ...

  9. 源码(04) -- java.util.List<E>

    java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------- ...

  10. 源码(06) -- java.util.AbstractList<E>

    java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...

随机推荐

  1. Tomcat多站点部署方式

    1.同一个Tomcat 同一个端口 部署多个项目 第一步:把待发布的多个项目.war文件放入tomcat的webapps文件下下 第二步:修改 $TOMCAT_HOME\conf 下的server.x ...

  2. windows 环境下 ping 加时间戳 记日志

    在c盘下面新建文件 ping.vbs 在 ping.vbs中输入代码如下: Dim args, flag, unsuccOut args="" otherout="&qu ...

  3. Springboot @webfilter @order filter过滤器

    我们使用@WebFilter注解的时候发现注解里面没有提供可以控制执行顺序的参数 @WebFilter 的属性 属性名 类型 描述 filterName String 指定过滤器的 name 属性,等 ...

  4. SpringBoot------Eclipce配置Spring Boot

    步骤一: 步骤二: 点击左下角Eclipse图标下的“Popular”菜单,选择Spring安装(已安装的插件在Installed中显示),一直按步骤确定就好了,如果中途下载超时什么的,就看看自己的网 ...

  5. Java -- 新IO -- 目录

    20.1 Java 新IO简介 20.2 缓冲区与Buffer 例:演示缓冲区的操作流程 Class : IntBufferDemo01 20.2.2 深入缓冲区操作 20.2.3 创建子缓冲区 20 ...

  6. Go之go与channel组合使用

    1,等待一个事件 <-ch 将一直阻塞,直到ch被关闭 或者 ch中可以取出值 为止 所以到第17行之后会去执行go后面的func()匿名函数,在里面给ch赋值后(或者close(ch))后,才 ...

  7. 【RF库Collections测试】Sort List

    Name:Sort ListSource:Collections <test library>Arguments:[ list_ ]Sorts the given list in plac ...

  8. es5.0 安装head插件

    es5.0的安装和之前的版本有些区别,我的电脑用plugin install 没成功, 查了一下资料,说是可以用grunt进行安装,启动; 1,先安装grunt: grunt是一个很方便的构建工具,可 ...

  9. SALT+HASH撒盐加密

    #region 撒盐加密 string salt = Guid.NewGuid().ToString(); byte[] passwordAndSaltBytes = System.Text.Enco ...

  10. android第三方---->android智能机器人的使用

    在网上找了个第三方智能机器人,可以实现聊天语音等功能,比较不错的.今天我们就开始智能机器人聊天的学习,例子中涉及的handler的有关知识和json数据的解析,请参见我的博客:android基础--- ...