equals方法

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

  1. /**
  2. * @ClassName: TestListAdd
  3. * @Description: TODO(测试List的equals()方法)
  4. * @author hoojjack
  5. * @date 2017年5月12日 上午11:37:06
  6. *
  7. */
  8. public class TestListAdd {
  9. private String name;
  10.  
  11. public TestListAdd() {
  12.  
  13. }
  14.  
  15. public TestListAdd(String name) {
  16. this.name = name;
  17. }
  18.  
  19. public String getName() {
  20. return name;
  21. }
  22.  
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26.  
  27. public static void main(String args[]){
  28. TestListAdd test =new TestListAdd("hujian");
  29. List<TestListAdd> list = new ArrayList<TestListAdd>();
  30. List<TestListAdd> list1 = new ArrayList<TestListAdd>();
  31. list.add(test);
  32. System.out.println("name="+test.getName());
  33. //list.add(new TestListAdd());
  34. test.setName("hoojjack");
  35. list1.add(test);
  36. System.out.println("name="+test.getName());
  37. //list1.add(new TestListAdd());
  38. System.out.println(list.equals(list1));
  39.  
  40. }
  41.  
  42. }

测试结果:

  1. name=hujianjie
  2. name=hoojjack
  3. true

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

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

ListIterator方法:

  1. public static void main(String args[]){
  2. TestListAdd test =new TestListAdd("hujian");
  3. List<TestListAdd> list = new ArrayList<TestListAdd>();
  4. List<TestListAdd> list1 = new ArrayList<TestListAdd>();
  5. list.add(test);
  6. list.add(new TestListAdd("123"));
  7. test.setName("hoojjack");
  8. list1.add(test);
  9. list1.add(new TestListAdd("456"));
  10. ListIterator<TestListAdd> listIterator = list.listIterator();
  11. //位置1
  12. while(listIterator.hasPrevious()){
  13. System.out.println(listIterator.previous().name);
  14. }
  15. //位置2
  16. while(listIterator.hasNext()){
  17. System.out.println(listIterator.next().name);
  18. }
  19. }

结果:

  1. hoojjack
  2. 123

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

  1. public static void main(String args[]){
  2. TestListAdd test =new TestListAdd("hujian");
  3. List<TestListAdd> list = new ArrayList<TestListAdd>();
  4. List<TestListAdd> list1 = new ArrayList<TestListAdd>();
  5. list.add(test);
  6. list.add(new TestListAdd("123"));
  7. test.setName("hoojjack");
  8. list1.add(test);
  9. list1.add(new TestListAdd("456"));
  10. ListIterator<TestListAdd> listIterator = list.listIterator();
  11. //位置1
  12. while(listIterator.hasNext()){
  13. System.out.println(listIterator.next().name);
  14. }
  15. //位置2
  16. while(listIterator.hasPrevious()){
  17. System.out.println(listIterator.previous().name);
  18. }
  19. }

结果:

  1. hoojjack
  2. 123
  3. 123
  4. 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. jsavascript 面向对象的下拉菜单

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. Anaconda本地安装python库

    很多时候我们需要自己手动安装一些库,例如因为网络原因,或者下载源没有这个包. 以Windows环境为例,无论是pip安装还是anaconda安装,最终的包都是安装在,工作目录/Lib/site-pac ...

  3. Ansible 实战:一键安装 LNMP

    Ansible 配置文件 : [root@center /data/ansiblework]# cat ansible.cfg [defaults] remote_user = root remote ...

  4. Memcached 运行状态

    memcached-tool 命令用于查看 Memcached 运行状态,用法如下: Usage: memcached-tool <host[:port] | /path/to/socket&g ...

  5. Memcached 命令行操作

    telnet 用于连接 Memcached: [root@localhost ~]# telnet Trying 127.0.0.1... Connected to 127.0.0.1. Escape ...

  6. iOS提交审核:您的 App 正在使用广告标识符 (IDFA)

    本文转载至  https://mp.weixin.qq.com/s?__biz=MzA3NzM0NzkxMQ==&mid=401172721&idx=1&sn=a369cf1b ...

  7. postgreSQL连接 java接口

    1.下载PostgreSQL JDBC驱动: http://jdbc.postgresql.org/download.html 2. 新建一个java项目,导入下载的jar包Add External ...

  8. .NET 正则表达式使用高级技巧之替换类介绍

    因为.net的基本正则语法和Perl5基本相同,所以基本语法你可以去下载一下M$的JS帮助文档,上面有详细的说明 \d表示什么,{,}表示什么,\[表示什么……,这里我只想提醒大家一点,为了避免和反向 ...

  9. .net 取得类的属性、方法、成员及通过属性名取得属性值

    //自定义的类 model m = new model(); //取得类的Type实例 //Type t = typeof(model); //取得m的Type实例 Type t = m.GetTyp ...

  10. <转>Python: and、or以及and-or

    转自 http://www.cnblogs.com/BeginMan/p/3197123.html 一.and: 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不 ...