16(栈,队列,泛型,增强for,漏删问题)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haidaiya/article/details/82894091

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()。

猜你喜欢

转载自blog.csdn.net/Haidaiya/article/details/82894091