Java.Util.List(List接口)
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接口)的更多相关文章
- java.util.Map.Entry接口
java.util.Map.Entry接口主要就是在遍历map的时候用到,给你个例子:package test;import java.util.*;import java.util.Map.Entr ...
- 在java.util中有EventListener接口:所有事件监听者都要实现这个接口。
在java.util中有EventListener接口:所有事件监听者都要实现这个接口. java.util中有EventObject类:所有的事件都为其子类. 事件范例在\CoreJava\Gi ...
- 做Webservice时报错java.util.List是接口, 而 JAXB 无法处理接口。
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExc ...
- Java 并发工具包 java.util.concurrent 用户指南
1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...
- java基础知识回顾之java Thread类学习(八)--java.util.concurrent.locks(JDK1.5)与synchronized异同讲解
看API文档介绍几个方法: JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock 2.接口Conditio ...
- 源码(03) -- java.util.Collection<E>
java.util.Collection<E> 源码分析(JDK1.7) -------------------------------------------------------- ...
- 源码(05) -- java.util.AbstractCollection<E>
java.util.AbstractCollection<E> 源码分析(JDK1.7) ------------------------------------------------- ...
- 源码(04) -- java.util.List<E>
java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------- ...
- 源码(06) -- java.util.AbstractList<E>
java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
随机推荐
- sql2008修改管理员与普通用户密码
方法一: sp_password Null,'123,'sa'把sa的密码设为“123” 执行成功后有“Command(s) completed successfully.” OK! 方法二: 第一步 ...
- MVC使用 Elmah 日志记录组件
在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额.删除商品.赠送金额等人工的操作.日志中记录着相关操作人的操作信息,这样,出了问题也容易排查. ...
- spring aop的配置
http://www.cnblogs.com/oumyye/p/4480196.html http://blog.csdn.net/hjm4702192/article/details/1727766 ...
- Ajax请求全局配置
摘要: jQuery已经成为项目中最常见的js库,也是前端开发最喜欢使用的库.下面是在项目中封装了jQuery的Ajax,分享给大家. 代码: // ajax 请求参数 var ajaxSetting ...
- Spring Cloud Sleuth 使用教程
Spring Cloud Sleuth 使用案例 Span术语(Terminology) Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过 ...
- pycharm pro版本激活
这几天行激活pycharm pro版会遇到问题,license server的网址都不可用了.包括各个网站的百度云的破解资源链接都被和谐了,发现最近jetbrains对盗版管得严. 首次安装在注册界面 ...
- http 返回码 405 解决方案之一
今天做网络请求数据的时候遇到返回码405,当时就傻了~~ 故事是这样的-- 我用post请求访问一个url,服务端数据是一个json的txt文件,理论上直接访问,返回json,然后解析就没事了,可是今 ...
- 【虚拟机】安装vmtools之后任然不能在虚拟机和主机之间复制粘贴的问题
一.卸载 ../bin/vmware-uninstall-tools.pl rm -rvf /usr/lib/vmware-tools apt-get install open-vm-tools-de ...
- CentOS下安装高版本GCC
CentOS下安装高版本GCC 微信分享: 有时编译需要用到4.8以上版本的GCC,由于CentOS源没有提供高版本的GCC安装包,这时就不能通过安装包安装.通常的解决方案就是通过编译安装高版本的 ...
- Windows下mysql重设密码
Windows下的实际操作如下 .关闭正在运行的MySQL,即关闭服务. .打开DOS窗口,转到mysql\bin目录. .输入 mysqld --skip-grant-tables 回车.如果没有出 ...