- 浏览: 1683811 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 748简介 在之前的文章里我们讨论过一些程序构建Pro ... -
java annotation基础
2018-06-30 16:41 893简介 之前有一篇简短的文章讨论过annotati ... -
spring源代码分析:annotation支持的实现
2018-09-03 23:31 2570简介 在之前的文章里,我们讨论了spring I ... -
spring container 实现分析:BeanFactory and ApplicationContext
2018-06-02 18:29 1479简介 在之前的文章里,我们讨论过作为spring ... -
spring aop: ProxyFactory
2018-04-30 16:45 851简介 在之前的文 ... -
日志与log4j2的配置和应用总结
2018-02-15 15:47 12334简介 通常我们在日常的应用开发中,日志起到一个非 ... -
Java servlet学习总结
2018-01-02 21:14 0简介 应用系统架构的演化(从CS到BS) ... -
spring container 实现分析:BeanWrapper
2018-02-19 18:10 2000简介 在之前的一篇文章里, 我们基于《Exper ... -
spring propertyeditor
2017-10-26 09:17 0pro spring 5 chapter 4, page ... -
spring bean life cycle
2018-02-25 13:30 938简介 在使用spring bean的过程中,有一个 ... -
spring container的设计与实现分析
2017-10-08 21:31 2796简介 在之前的一 ... -
jdbc数据访问的封装和演化
2017-09-16 17:00 2705简介 在使用传统jdbc的方式来访问数据的时候, ... -
Boyer Moore算法分析总结
2017-03-31 18:42 3566简介 在之前的文章里,对于字符串的搜索算法,我曾 ... -
mybatis学习总结:mybatis和spring, spring boot的集成
2017-03-04 18:07 2517简介 在前面的讨论里已经提到了mybatis的各种配置 ... -
mybatis学习总结:annotation与xml结合示例
2017-02-25 21:09 3714简介 在之前的文章里讨论过mybatis纯xml或者 ... -
mybatis学习总结:对象关系映射的xml配置实现
2017-02-19 23:03 4072简介 在之前的文章里已经讨论过mybatis的基本配 ... -
mybatis学习总结:annotation示例改进
2017-01-24 09:06 3447简介 在前一篇文 ... -
mybatis学习总结:基础示例
2017-01-21 23:30 906简介 mybatis是一个比较流行的ORM框架, ... -
gradle学习总结
2016-12-18 21:01 4643简介 Java的自动化构建工具比较多,从最开始的an ... -
String sort的几种方法
2016-10-16 23:07 2197简介 在之前的一 ...
相关推荐
ArrayList的removeAll方法是一个常用的集合操作方法,该方法可以从一个ArrayList中删除所有在另外一个集合中的元素。但是,在实际开发过程中,removeAll方法的使用需要 thận重,因为它可能会导致性能问题。 1. ...
ArrayList的设计基于一个可调整大小的数组,它允许我们在列表的任何位置进行添加、删除和查找元素等操作。这个压缩包"arrayList.zip"可能包含了关于ArrayList的源码分析、实现细节以及使用示例。 线性表是一种基本...
如果多个线程同时访问一个ArrayList实例,至少线程修改的一个列表结构,它必须保持外部同步。 (结构上的修改是指添加或删除一个或多个元件,或明确地调整大小背衬阵列的操作;仅设置元素的值不是结构修改。)这是一...
如果多个线程同时访问一个`ArrayList`实例,并且至少有一个线程修改了该列表,则必须保持外部同步。 7. **序列化支持**:`ArrayList`实现了`Serializable`接口,可以通过序列化机制保存其状态。 8. **初始化与预...
ArrayList的核心实现是通过一个Object类型的数组来存储元素。当添加元素时,如果当前容量不足,ArrayList会自动扩容,通常扩容为原来的1.5倍。这种设计使得ArrayList在插入元素时有较好的性能表现,但删除元素特别是...
`remove()`方法是`List`接口中的一个关键操作,用于从列表中删除指定的元素或根据索引移除元素。在使用`remove()`方法时,需要注意一些重要的细节以避免潜在的问题和错误。下面将详细介绍`List.remove()`方法的两种...
在Java编程语言中,ArrayList是集合框架中的一种重要数据结构,它是一个动态数组,可以存储任意类型的对象。ArrayList提供了一种高效的方式来管理大量的元素,并且提供了迭代器(Iterator)来遍历这些元素,使得我们...
- **定义**:`String` 类表示不可变的字符序列,即一旦创建了一个 `String` 对象,它的值就不能改变。 - **用途**:常用于存储固定的文本数据,如数据库连接字符串、文件路径等。 - **特点**: - 不可变性提高了...
如`new ArrayList()`创建一个空的ArrayList,或者`new ArrayList(initialCapacity)`指定初始容量。源码中,elementData数组的初始容量为0,当添加元素时会自动扩容。 2. **添加对象**: 使用`add(E e)`方法将对象...
ArrayList是Java集合框架中的一个重要组成部分,它是基于动态数组实现的列表。在Java 1.8版本中,ArrayList的实现细节和内部工作原理对于理解其性能和行为至关重要。本文将深入探讨ArrayList的源码,解析其实现逻辑...
这是一个非常适合初学者学习编程逻辑和算法的实例,特别是对于Java编程语言的学习者。斗地主是一种广受欢迎的扑克游戏,通常由三名玩家进行,每名玩家会收到17张牌,留三张作为底牌。在游戏开始前,洗牌和发牌是必不...
2. **迭代器(Iterator)**:在Java中,迭代器是一种设计模式,用于遍历集合中的元素,提供了`hasNext()`方法检查是否还有下一个元素,以及`next()`方法获取下一个元素。迭代器模式使得代码对具体的集合实现细节透明...
要创建一个ArrayList,可以使用以下语法: ```java ArrayList<String> stringList = new ArrayList(); ``` 这里,我们定义了一个存储字符串的ArrayList。 3. 添加元素: 使用`add()`方法向ArrayList中添加...
假设我们有一个包含元素"a", "b", "c", "d"的ArrayList,使用迭代器遍历时,游标初始指向第一个元素"a"。如果在遍历过程中删除元素"a",由于ArrayList的删除操作会移动后面的元素来填补空位,原本指向元素"b"的游标...
在这个例子中,`NoSortHashTable`继承了`Hashtable`,并使用了一个`ArrayList`来存储键的顺序。当添加新元素时,除了在哈希表中添加之外,还会将键添加到`ArrayList`中。当移除元素时,也会同步更新`ArrayList`。...
Java中的ArrayList和Vector都是列表(List)接口的实现类,它们在功能上相似,但在细节上存在一些重要的差异。这两个类都是基于数组实现的,但它们的性能特点、线程安全性和扩容策略有所不同。 1. **扩容策略**: ...
在这个"Java小程序"中,我们看到了一个名为`IteratorDemo`的文件,这通常表示这是一个关于Java迭代器(Iterator)的示例。迭代器是Java集合框架的一部分,它提供了一种遍历集合元素的方法,而不必暴露底层的实现细节...
适配器中要包含一个ArrayList,用于存储数据和CheckBox的状态。 ```java public class CustomAdapter extends ArrayAdapter<String> { private ArrayList<String> items; private ArrayList<Boolean> ...