zoukankan      html  css  js  c++  java
  • Java.Util.List(List接口)

    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
  • 相关阅读:
    UVA 213 Message Decoding 【模拟】
    HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)
    HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)
    HDU 5963 朋友 【博弈论】 (2016年中国大学生程序设计竞赛(合肥))
    HDU 5969 最大的位或 【贪心】 (2016年中国大学生程序设计竞赛(合肥))
    HDU 5968 异或密码 【模拟】 2016年中国大学生程序设计竞赛(合肥)
    HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))
    HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))
    HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
    HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)
  • 原文地址:https://www.cnblogs.com/hoojjack/p/6874257.html
Copyright © 2011-2022 走看看