ArrayList去除重复元素
去除一个ArrayList的重复元素有两种方法:(ArrayList与Vector的存储结构是Object[],LinkedList是双向列表)
第一种是不需要借助临时list,用equals方法比较ArrayList中数据,两次遍历原来list;
第二种是借助一个临时ArrayList,向临时List添加数据,调用arrayList.contains(obj)判断是否存在
了解ArrayList的contains原理:调用obj的equals方法进行判断在ArrayList中的位置是否大于零,进而判断是否存在。
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
/**
* Returns the index of the first occurrence of the specified element
* in this list, or -1 if this list does not contain the element.
* More formally, returns the lowest index <tt>i</tt> such that
* <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
* or -1 if there is no such index.
*/
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
1. 两种方式对ArrayList中重复字符串的处理:
@Test
// 第一种去重复方法
public void Test1() {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("4");
list.add("3");
list.add("2");
list.add("1");
System.out.println("去重复元素之前:");
for (String s : list) {
System.out.println(s);
}
// 遍历ArrayList
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j))) {
list.remove(j);
}
}
}
System.out.println(list.size());
System.out.println("去重复元素之后:");
for (String s : list) {
System.out.println(s);
}
} @Test
// 第二种去重复方法
public void Test2() {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("4");
list.add("3");
list.add("2");
list.add("1");
List<String> temp = new ArrayList<String>();
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
if (!temp.contains(str)) {
temp.add(str);
}
}
for (String s : temp) {
System.out.println(s);
}
}
2. 两种方式对ArrayList中重复对象的处理:
Person.java 重写equals方法
package cn.xm.exam.test.javaTest;
import static org.hamcrest.CoreMatchers.instanceOf;
public class Person {
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Person(String name, String id) {
super();
this.name = name;
this.id = id;
}
// 重写一个Bean的hashCode方法
/*
* @Override public int hashCode() { // TODO Auto-generated method stub
* return this.name.hashCode()+this.id.hashCode(); }
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Person)) {
throw new ClassCastException();// 类型错误
}
Person pp = (Person) obj;
return this.getId().equals(pp.getId()) && this.getName().equals(pp.getName());
}
@Override
public String toString() {
return "Person [name=" + name + ", id=" + id + "]";
}
}
去重算法:
@Test
// 第一种去重复方法去除Object重复的
public void Test3() {
List<Person> list = new ArrayList<Person>();
list.add(new Person("张三", "1"));
list.add(new Person("张三", "2"));
list.add(new Person("张三", "3"));
list.add(new Person("张三", "4"));
list.add(new Person("李四", "1"));
list.add(new Person("李四", "2"));
list.add(new Person("张三", "1"));
list.add(new Person("李四", "1"));
// 遍历ArrayList
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j))) {
list.remove(j);
}
}
}
for (Person p : list) {
System.out.println(p);
}
} @Test
// 第二种去重复方法去除Object重复的
public void Test4() {
List<Person> list = new ArrayList<Person>();
list.add(new Person("张三", "1"));
list.add(new Person("张三", "2"));
list.add(new Person("张三", "3"));
list.add(new Person("张三", "4"));
list.add(new Person("李四", "1"));
list.add(new Person("李四", "2"));
list.add(new Person("张三", "1"));
list.add(new Person("李四", "1"));
List<Person> temp = new ArrayList<Person>();
Iterator<Person> iterator = list.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
if (!temp.contains(person)) {
temp.add(person);
}
}
for (Person p : temp) {
System.out.println(p);
}
}
结果:
Person [name=张三, id=1]
Person [name=张三, id=2]
Person [name=张三, id=3]
Person [name=张三, id=4]
Person [name=李四, id=1]
Person [name=李四, id=2]
ArrayList去除重复元素的更多相关文章
- ArrayList去除重复元素(多种方法实现)
package other; import java.util.ArrayList; import java.util.HashSet; public class test4 { public sta ...
- ArrayList去除重复元素(包括字符串和自定义对象)
1.去除重复字符串 package com.online.msym; import java.util.ArrayList; import java.util.Iterator; @SuppressW ...
- java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据 ...
- Python列表去除重复元素
主要尝试了3种列表去除重复元素 #2.去除列表中的重复元素 #set方法 def removeDuplicates_set(nums): l2 = list(set(l1)) #用l1的顺序排序l2 ...
- Java 删除ArrayList中重复元素,保持顺序
// 删除ArrayList中重复元素,保持顺序 public static List<Map<String, Object>> removeDuplicat ...
- LintCode 521.去除重复元素
LintCode 521.去除重复元素 描述 给一个整数数组,去除重复的元素. 你应该做这些事 1.在原数组上操作 2.将去除重复之后的元素放在数组的开头 3.返回去除重复元素之后的元素个数 挑战 1 ...
- php将多个值的数组去除重复元素
array_unique(array) 只能处理value只有单个的数组. 去除有多个value数组,可以使用如下函数实现: function more_array_unique($arr=array ...
- [C++]vector去除重复元素
#include <iostream> #include <vector> #include <algorithm> #include <set> us ...
- C语言两个升序递增链表逆序合并为一个降序递减链表,并去除重复元素
#include"stdafx.h" #include<stdlib.h> #define LEN sizeof(struct student) struct stud ...
随机推荐
- pageHelper分页插件失效问题
在bootstrap中引用pageHelper进行页面分页<dependency><groupId>com.github.pagehelper</groupId>& ...
- centos 6.2用yum安装中文输入法
centos 6.2用yum安装中文输入法 1.su root 2.yum install "@Chinese Support" 3.exit 4.回到桌面,system-> ...
- TFS2010单独安装配置tfs build server
记录一下确实很磨人. 同样硬件和软件环境的两台服务器,其中一台服务器很久之前就配置好了tfs2010 build ,然后最近想再配置一台tfs build server,但是按照以前的配置流程始终提示 ...
- 数据库系统概论(2)——Chap. 2 关系数据库基础
数据库系统概论(2)--Chap.2 关系数据库基础 一.关系数据结构及形式化定义 1.关系 关系模型的数据结构只包含单一的数据结构--关系.在关系模型中,现实世界的实体及实体间的各种联系均用单一的结 ...
- 页面定制CSS代码
博客皮肤:SimpleMemory .catListTitle { margin-top: 21px; margin-bottom: 10.5px; text-align: left; border- ...
- 在Vue中遇到的各种坑 及性能提升
Vue: (1) 没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...
- WPF知识点全攻略00- 目录
知识点目录如下: 1.WPF相对WinFrom的优缺点 2.WPF体系结构 3.XAML 4.XAML页面布局 5.XAML内容控件 6.WPF中的“树” 7.Binding 8.依赖属性 9.附加属 ...
- java 垃圾回收之标记算法
对象被判定为垃圾的标准 1.没有被其他对象引用 判定对象是否为垃圾的算法 1.引用计数算法(不是主流垃圾回收机制) 1.1 判定对象的引用数量 1.1.1 通过判断对象的引用数量来决定对象是否可以被回 ...
- 洛谷 P3146 248 题解
https://www.luogu.org/problemnew/show/P3146 区间dp,这次设计的状态和一般的有一定的差异. 这次我们定义$dp[i][j]$表示$[i,j]$的可以合并出来 ...
- 5.1 qbxt 一测 T1
禁咒检验 (3MB / 2s)[问题描述] 在古老的世界里,有一个神奇的职业叫做魔法师. 魔法师的特点是会魔法,施放魔法需要念咒语. 在古老的世界里,有一个神奇的职业叫做码农.码农的工作是帮助魔法师记 ...