详细标题:去除ArrayList中重复字符串、自定义对象元素方式 栈和队列 泛型 JDK5新特性(增强for循环 三种迭代(普通for、迭代器、增强for)中的元素能否删除 静态导入 可变参数)Arrays工具类的asList() Collection中toArray(T[] a) 集合嵌套之ArrayList嵌套ArrayList
目录
三种迭代(普通for、迭代器、增强for)中的元素能否删除:
去除ArrayList中重复字符串元素方式:
案例演示:
需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)。
思路:创建新集合方式。
import java.util.ArrayList;
import java.util.Iterator;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class Demo1_ArrayList {
/**
* 案例演示:
* 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)。
* 思路:创建新集合方式。
*/
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("c");
list.add("c");
ArrayList newList = getSingle(list);
System.out.println(newList);
}
/*
* 创建新集合将重复元素去掉
* 1.明确返回值类型,返回ArrayList。
* 2.明确参数列表,参数列表ArrayList。
*
* 分析:
* 1.创建新集合。
* 2.根据传入的集合(老集合)获取迭代器。
* 3.遍历老集合。
* 4.通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加。
*/
public static ArrayList getSingle(ArrayList list) {
ArrayList newList = new ArrayList(); //创建一个新集合
Iterator it = list.iterator(); //根据传入的集合(老集合)获取迭代器
while(it.hasNext()) { //遍历老集合
Object obj = it.next(); //将每一个元素临时记录住
if(!newList.contains(obj)) { //如果新集合中不包含老集合中的元素
newList.add(obj); //将该元素添加到新集合中
}
}
return newList; //将新集合返回
}
}
去除ArrayList中重复自定义对象元素:
案例演示:
需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)。
注意事项:contains方法判断是否包含,底层依赖的是equals方法。所以要自定义类中要重写equals()方法。remove()判断是否删除,底层也是依赖equals方法。
import java.util.ArrayList;
import java.util.Iterator;
/**
* 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)。
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class Demo2_ArrayList {
public static void main(String[] args) {
ArrayList list = new ArrayList(); //创建几个对象
list.add(new Person("张三", 23));
list.add(new Person("张三", 23));
list.add(new Person("李四", 24));
list.add(new Person("李四", 24));
list.add(new Person("李四", 24));
list.add(new Person("李四", 24));
ArrayList newList = getSingle(list); //调用方法去除重复
System.out.println(newList);
list.remove(new Person("张三", 23));
System.out.println(list);
/*public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) { //remove方法底层依赖的也是equals方法
fastRemove(index);
return true;
}
}
return false;
}*/
}
/*
* 创建新集合将重复元素去掉
* 1.明确返回值类型,返回ArrayList。
* 2.明确参数列表,参数列表ArrayList。
*
* 分析:
* 1.创建新集合。
* 2.根据传入的集合(老集合)获取迭代器。
* 3.遍历老集合。
* 4.通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加。
* 5.在自定义类中Ctrl + Alt + S + V重写equals方法。
* public boolean equals(Object obj) {
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age; //调用字符串里的equals方法
}
*/
public static ArrayList getSingle(ArrayList list) {
ArrayList newList = new ArrayList(); //创建一个新集合
Iterator it = list.iterator(); //根据传入的集合(老集合)获取迭代器
/*public boolean contains(Object o) {
return indexOf(o) >= 0;
}
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])) //底层用equals()作比较,自定义类中没有重写equals方法,所以使用Object类中的equals方法,判断的是地址值。每个对象地址值是不同的,所以最后打印了所有对象
return i;
}
return -1;
}*