- 浏览: 1666763 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (335)
- uml (11)
- java (318)
- python (11)
- socket (2)
- ant (1)
- data structures (58)
- algorithms (67)
- concurrency (16)
- multithreading (16)
- mysql (2)
- ubuntu (2)
- c语言 (1)
- lucene (0)
- elasticsearch (0)
- django (1)
- 读书 观点 (2)
- 读书 (4)
- 观点 (4)
- collections (8)
- nio (1)
- io (2)
- 系统集成 (1)
- activemq (2)
- restful (0)
- web service (0)
- HttpClient (1)
- serializable (0)
- annotation (1)
- jdbc (3)
- classloader (0)
- regular expression (1)
- jpa (4)
- jvm (0)
- reflection (1)
- commons-pool2 (2)
- javamail (1)
- velocity (1)
- mathematics (3)
- graph (13)
- LeetCode (159)
- scala (0)
- spring (24)
- maven (5)
- spring batch (1)
- quartz (2)
- IOC (2)
- ORM (3)
- hibernate (2)
- aop (4)
- redis (0)
- zookeeper (0)
- spring mvc (4)
- ELK (1)
- string (1)
- gradle (1)
- mybatis (5)
- docker (0)
- servlet (0)
- log4j2 (1)
- html (0)
- css (0)
最新评论
-
nucleus:
貌似是因为图片的路径是http的缘故:http://dl2.i ...
spring container 实现分析:BeanWrapper -
nucleus:
nucleus 写道BeanWrapper这一块相关的类结构如 ...
spring container 实现分析:BeanWrapper -
nucleus:
BeanWrapper这一块相关的类结构如下图:文中提到的上述 ...
spring container 实现分析:BeanWrapper -
leshy:
inventory.sort(Comparator.compa ...
java8 lambda表达式学习总结 -
Leisurez:
di1984HIT 写道xuexile~hahaha~
activemq的几种基本通信方式总结
不废话,先上代码:
ArrayList<Integer> col = new ArrayList<Integer>(); System.out.println("Initial size: " + col.size()); for(int i = 0; i < 20; i++) col.add(i + 10);
显然,上面这段代码再简单不过了,建立一个Interger类型参数的ArrayList.
于是考虑到要从ArrayList删除两个元素,比如10, 25。初步设想的代码如下:
col.remove(10); col.remove(25);
基于这种设想的原因是,既然ArrayList<Integer>里的类型是Integer,我传入一个int的应该可以自动实现autoboxing.那么,如果和设想的一样,col中的10和25两个元素都被删除了。
实际运行的结果不然:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 25, Size: 20
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.remove(ArrayList.java:445)
at CollectionBasics.main(CollectionBasics.java:54)
从错误中间可以看到,提示的是访问数组索引越界了。怎么会这样呢?很显然,传入的10,25被当成索引而不是要移除的元素。
察看java doc里面才发现,里面有两个remove方法,分别定义如下:
public E remove(int index); public boolean remove(Object o);
当我们传入int类型的时候,会自动被当成上面那个方法来调用。而下面那个移除某个特定元素的方法是需要传入一个Object对象。所以,为了移除制定的元素而不至于引起混淆的话,可以将传入的int先封装一下:
col.remove((Integer)10); col.remove((Integer)25);这样结果就对了。
评论
5 楼
793059909
2014-07-08
frank-liu 写道
793059909 写道
重载有优先级?
837062099 写道
重载方法中,调用优先级最高的是最精确的方法。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
因为在这里remove方法接收的参数是remove(Integer item),就是说如果我们传进来的参数是Integer类型的,那么就会调用这个删除指定元素的方法。而还有一个remove(int item)这个方法接收的参数是int类型的,和它最匹配的是一个int参数。在前面的代码里我们传进来的参数就是直接的一个int,所以和它最匹配的那个就是删除指定索引的那个。
package overload.special; public class OverLoadTest { public void test(Object obj){ System.out.println("Object:"+obj); } public void test(Integer integer){ System.out.println("Integer:"+integer); } public void test(int int1){ System.out.println("int:"+int1); } public void test(String str){ System.out.println("String:"+str); } public static void main(String[] args) { OverLoadTest ot=new OverLoadTest(); ot.test(1); ot.test("1"); } }
输出:
int:1
String:1
===》
优先级:
基本类型>对象
对象中 子类>父类,其中Object类的优先级最低
4 楼
frank-liu
2014-07-04
793059909 写道
重载有优先级?
837062099 写道
重载方法中,调用优先级最高的是最精确的方法。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
因为在这里remove方法接收的参数是remove(Integer item),就是说如果我们传进来的参数是Integer类型的,那么就会调用这个删除指定元素的方法。而还有一个remove(int item)这个方法接收的参数是int类型的,和它最匹配的是一个int参数。在前面的代码里我们传进来的参数就是直接的一个int,所以和它最匹配的那个就是删除指定索引的那个。
3 楼
793059909
2014-07-04
重载有优先级?
837062099 写道
重载方法中,调用优先级最高的是最精确的方法。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
2 楼
lizhensan
2012-03-10
void method(int a)
void method(Integer a)
这两个方法是重装的方法,调用时不一样的。
void method(Integer a)
这两个方法是重装的方法,调用时不一样的。
1 楼
837062099
2012-03-09
重载方法中,调用优先级最高的是最精确的方法。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
这样的重载,确实很容易是调用者发生错误,以前我自己写的这样的方法,找了好久才发现这个错误。
发表评论
-
spring源代码分析:aop的实现
2018-10-03 23:32 687简介 在之前的文章里我们讨论过一些程序构建Pro ... -
java annotation基础
2018-06-30 16:41 833简介 之前有一篇简短的文章讨论过annotati ... -
spring源代码分析:annotation支持的实现
2018-09-03 23:31 2458简介 在之前的文章里,我们讨论了spring I ... -
spring container 实现分析:BeanFactory and ApplicationContext
2018-06-02 18:29 1406简介 在之前的文章里,我们讨论过作为spring ... -
spring aop: ProxyFactory
2018-04-30 16:45 788简介 在之前的文 ... -
日志与log4j2的配置和应用总结
2018-02-15 15:47 12195简介 通常我们在日常的应用开发中,日志起到一个非 ... -
Java servlet学习总结
2018-01-02 21:14 0简介 应用系统架构的演化(从CS到BS) ... -
spring container 实现分析:BeanWrapper
2018-02-19 18:10 1856简介 在之前的一篇文章里, 我们基于《Exper ... -
spring propertyeditor
2017-10-26 09:17 0pro spring 5 chapter 4, page ... -
spring bean life cycle
2018-02-25 13:30 871简介 在使用spring bean的过程中,有一个 ... -
spring container的设计与实现分析
2017-10-08 21:31 2656简介 在之前的一 ... -
jdbc数据访问的封装和演化
2017-09-16 17:00 2600简介 在使用传统jdbc的方式来访问数据的时候, ... -
Boyer Moore算法分析总结
2017-03-31 18:42 3481简介 在之前的文章里,对于字符串的搜索算法,我曾 ... -
mybatis学习总结:mybatis和spring, spring boot的集成
2017-03-04 18:07 2466简介 在前面的讨论里已经提到了mybatis的各种配置 ... -
mybatis学习总结:annotation与xml结合示例
2017-02-25 21:09 3648简介 在之前的文章里讨论过mybatis纯xml或者 ... -
mybatis学习总结:对象关系映射的xml配置实现
2017-02-19 23:03 4010简介 在之前的文章里已经讨论过mybatis的基本配 ... -
mybatis学习总结:annotation示例改进
2017-01-24 09:06 3386简介 在前一篇文 ... -
mybatis学习总结:基础示例
2017-01-21 23:30 843简介 mybatis是一个比较流行的ORM框架, ... -
gradle学习总结
2016-12-18 21:01 4531简介 Java的自动化构建工具比较多,从最开始的an ... -
String sort的几种方法
2016-10-16 23:07 2119简介 在之前的一 ...
相关推荐
主要介绍了java ArrayList.remove()的三种错误用法以及六种正确用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
模仿sun公司的ArrayList自己封装了一个容器类,能基本实现全部功能,在数组的一些方法上进行了修改优化
2. 多个线程同时进行put、remove等操作时并不会阻塞,可以同时进行,和HashTable不同,HashTable在操作时,会锁住整个Map; 3. 迭代过程中,即使Map结构被修改,也不会抛ConcurrentModificationException异常; 4. ...
arraylist .
Java Methods-java.util.ArrayList.ppt
主要给大家介绍了关于Java中ArrayList的removeAll方法的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来看看吧。
java提高篇(二一)-----ArrayList.pdf
ArrayList.cpp
Arraylist
ArrayList.java
arraylist.java
ArrayList.pdf
【IT十八掌徐培成】Java基础第10天-03.List-集合框架-ArrayList.zip
ArrayList的Java源代码,可供开发者查看阅读,希望对大家有用,同时可以参看个人博文,便于理解。https://blog.csdn.net/la859962513/article/details/82752510