1 ArrayList的去重
思路是这样的:1.创建一个新的数组集合
2.遍历我们需要去重的集合
3.使用ArrayList的contains方法查看新集合中是否包含遍历的元素,没有就添加至新集合
package com.haidai.List;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo2 {
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
arr.add("a");
arr.add("a");
arr.add("b");
arr.add("b");
arr.add("c");
arr.add("c");
arr.add("abc");
arr.add("bcd");
System.out.println(arr);
ArrayList<String> arr1 = quChong(arr);
System.out.println(arr1);
}
public static ArrayList<String> quChong(ArrayList<String> arr){
ArrayList<String> temp = new ArrayList<String>();
Iterator<String> it = arr.iterator();
while(it.hasNext()) {
String t = it.next();
if(!temp.contains(t)) {
temp.add(t);
}
}
return temp;
}
}
有一个细节问题可能会遇到,当集合中存储的是对象元素的时候,我按照上面的方法去重发现没有办法去重?原因在于contains方法的底层依赖于equals方法,他比较的是对象的地址值,那么list中的对象元素的地址值当然是不同的,如何解决呢,可以在对象的类中重写equals方法,改变equals中比较原则,list集合中的remove方法底层依赖的也是equals。
2 数据结构之栈(一端开口的管子)和队列(两端开口的管子)
3 泛型
泛型的使用还是很简单的,我想描述一下泛型的原理:
这里注意一下,在静态方法上使用泛型时,要在static<T>上定义泛型,因为静态方法是随着类的加载而加载。
泛型接口
4 泛型通配符
5 增强for循环(foreach)
底层由迭代器实现。
快捷键fore
6 我的盲点(循环漏删问题)
这一段时间做这样的笔记,目的在于将之前学习过程中的囫囵吞枣给弥补回来,也是为了更好的转大数据的学习,这里再一次看见了自己的盲点知识,还是很高兴的。
至今我已经学了三种循环了,普通for循环,迭代器循环,增强for循环。
这段代码其实会出现漏删现象。至于为什么,我已经会了。
至于解决方法,其实只需要将remove中改为i--就好了,至于为什么,自己推倒把。
如果使用集合的删除,就会出现并发修改异常,需要使用迭代器的删除,就和9.27日的listIterator一样。
7 数组转集合
好像很有用,但是不能增加和减少数据,但是可以使用其他的方法,比如包含,获取等。
集合转数组,用toArray()。