ArrayList调用remove方法需要注意的地方
ArrayList中有remove 方法和 removeAll方法,
ArrayList中不仅继承了接口Collection中的remove方法,而且还扩展了remove方法。
Collection中声明的接口为 public boolean remove(Object o)
public boolean removeAll(Collection<?> c)
ArrayList中含有的方法为public E remove(int index)
实际编程中可能会通过一个Collection来调用remove接口,这种情况下不会报错,但是程序什么也不做。
import java.util.ArrayList;
import java.util.Collection;
import java.util.List; public class ArrayList01 { public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> allList = null;
Collection<String> allCollection = null; allList = new ArrayList<String>();
allCollection = new ArrayList<String>(); allList.add("hello");
allList.add(0, "world");
System.out.println(allList);
allCollection.add("Yes");
allCollection.add("Good");
allList.addAll(allCollection);
allList.addAll(0, allCollection); System.out.println(allList); allList.remove(allCollection);
//allList.removeAll(allCollection);
System.out.println(allList);
} }
实际编程可以插入任意对象,但是如果想要通过remove(object o)来删除某个对象,这个对象必须是系统自定义的对象,如果不是的话,需要在类中覆写Object类的equals()及hashCode()方法。
HashSet 特点:
里面元素不能重复,而且采用散列的存储方式,没有顺序。
TreeSet 特点:
可以对输入的数据进行有序的排列。
虽然如此,但是对于自定义的类,如果没有制定好排序规则,会出现异常,因此必须实现comparable接口才能正常使用TreeSet。实现comparable接口还需注意,如果对于类中某个属性没有进行比较的指定,则也会认为是同一个对象,比如Man{name = tom, score = 20}; Man { name = Jim,score = 20};如果只是指定score的比较,而没有指定名字的比较,则会认为两个Man对象是同一个对象。
而对于HashSet,如果想要除去其中所有的重复元素,必须覆写Object类中的equals()方法和hashCode()方法,后者是表示一个哈希编码,可以理解为一个对象的编码。
import java.util.HashSet;
import java.util.Set; class Per{
private String name;
private int age;
public Per(String name, int age) {
// TODO Auto-generated constructor stub
this.name = name;
this.age = age;
} public boolean equals(Object obj){
if (this == obj) { //地址相等时是同一个对象
return true;
}
if (!(obj instanceof Per)) { //传进来的不是本类的对象 不是同一个对象
return false;
} Per p = (Per)obj; //进行向下转型
if (this.name.equals(p.name)&&this.age==p.age) { //属性依次比较,如果相等,是同一个对象,不等不是同一个对象
return true;
}else {
return false;
}
} public int hashCode(){
return this.name.hashCode()*this.age; //覆写hashCode 方法,指定编码公式
} public String toString(){
return "姓名:"+this.name+"; 年龄: "+this.age;
}
} public class SetDemo02 { public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Per> allSet = new HashSet<Per>();
allSet.add(new Per("Tom", 30));
allSet.add(new Per("Jim", 31));
allSet.add(new Per("Tony", 32));
allSet.add(new Per("Tony", 32));
allSet.add(new Per("Tony", 32));
allSet.add(new Per("Jack", 29));
allSet.add(new Per("Mark", 33)); System.out.println(allSet); } }
ArrayList调用remove方法需要注意的地方的更多相关文章
- ArrayList调用remove(int index)抛出UnsupportedOperationException问题分析以及解决记录
使用Arrays转数组成为List后,不能调用add(...)和remove(...)方法,此时如果调用就会抛出UnsupportedOperationException异常 原因 其实Arrays. ...
- List 调用 remove 方法时抛出 java.lang.UnsupportedOperationException 异常原因
原因 使用 Arrays.asList(arr) 转换的 List 并不能进行 add 和 remove 操作. Arrays.asList(arr) 返回的类型是 Aarrays$Arr ...
- Java基础(37)ArrayList的remove方法
1.问题描述 给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 输入: s = "abcd& ...
- java ArrayList的remove()方法的参数为int和Integer的问题
ArrayList的父类List中,有2个remove重载方法: remove(int index) remove(Object o) 假如参数输入为数字类型,到底是删除值等于该数字的对象还是删除索引 ...
- Java list.remove( )方法需要注意的地方
List<Integer> integerList = new ArrayList<>(); 当我们要移除某个Item的时候 remove(int position):移除某个 ...
- List的remove方法里的坑
今天遇到一件怪事,用一个ArrayList添加了一个对象,再调用ArrayList的remove方法删除该对象,当然这时对象是数据库里查出来的,但内容绝对是一样,却发现remove失败了.演示一下,这 ...
- java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();
什么是List集合: 特点: 元素有序可重复的集合. 集合中每个元素都有其对应的顺序索引. List集合默认按元素的添加顺序设置元素的索引,索引从0开始. List接口的常用方法: List可以使 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- List<T>的IndexOf方法和Remove方法
Microsoft地址 List<T>的IndexOf()方法 如果T是值类型的,就按照比较值的方法从列表的第一个元素开始逐个匹配,如果T是引用类型,就比较引用是否相同 举例如下: cla ...
随机推荐
- Wcf for wp8 使用iis Express 承载Wcf服务部署发布网站(三)
我们接下来要做的是 本地电脑当作服务器(模拟外网服务器)来承载Wcf服务程序,通过引用本地电脑ip地址访问wcf服务程序接口 http://192.168.1.123/Service1.svc 一.先 ...
- Action类为何要 extends ActionSupport
我做的时候,我的action是继承ActionSupport的 Struts 2的Action无须实现任何接口或继承任何类型,普通的POJO类就可以用做Action类,但是,我们为了方便实现Actio ...
- loj 1017(dp)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25843 思路:我们可以发现题目与点的X坐标没有关系,于是可以直接对 ...
- [saiku] 在 Tomcat 下部署 saiku
上一篇介绍了如何配置免登录[免登录进入管理台] 本文主要是一步一步解释如何在Tomcat下部署saiku,为了让你更好更快的使用. 开始之前,假设你已经比较熟悉数据集市数据库,以及如何建立Mondri ...
- 人见人爱A^B
求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方” Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A= ...
- 阿里云SDK手册之java SDK
进行阿里云sdk开发的前提是已经购买阿里云的相关服务才能调用阿里的相关接口进行开发.最近公司在做云管控的项目,于是进行下摘录总结. 一. 环境准备 阿里云针对不同的开发语言提供不同的sdk,由于项目用 ...
- ZOJ1516 Uncle Tom's Inherited Land(二分图最大匹配)
一个经典的构图:对格子进行黑白染色,黑白的点分别作XY部的点. 这一题的边就是可以出售的单位面积2的土地,边的端点就是这个土地占用的X部和Y部的两个点. 这样就建好二分图,要求最多土地的答案显然是这个 ...
- 2015ACM/ICPC亚洲区长春站 A hdu 5527 Too Rich
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- python 代码片段
print 'dongshen' for word in ['capitalize','these','words']: print word.upper() for i in range(0,5): ...
- 在线代码格式化,在线JSON校验格式化
在线代码格式化 http://tool.oschina.net/codeformat/json 在线JSON校验格式化 http://www.kjson.com/ 两个好用工具