Java语法回顾Collection之ArrayList续01
读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人眼中的专家。
List子类元素的特点
/*
* List三个儿子的特点:
* List:
* |--ArrayList
* 底层数据结构是数组,查询快,增删慢
* 线程不安全,效率高。
* |--Vector
* 底层数据结构是数组,查询快,增删慢
* 线程安全,效率低。
* |--LinkedList
* 底层数据结构是链表,查询慢,增删快
* 线程不安全,效率高。
* 请问,以后我们到底用他的哪个儿子呢?
* 想安全吗:
* 想:Vector
* 不想:ArrayList和LinkedList
* 查询快:ArrayList
* 增删快:LinkedList
* 你根本不会分析,不知道用谁。用ArrayList。
*/
ArrayList去除重复元素1
/*
* 需求:我现在用ArrayList存储多个字符串元素。
* 比如说数据如下:
* hello,world,java,hello,.net,java,php,IOS,java,android
* 我要求你写程序,实现去除重复元素。
* 也就是说结果是:
* hello,world,java,.net,php,IOS,android
*
* 思路:
* A:创建一个新的集合。
* B:在同一个集合上操作。
*/
ArrayList去除重复元素代码测试
public class ArrayListTest {
public static void main(String[] args) {
//创建旧集合,并添加元素
ArrayList array = new ArrayList();
array.add("hello");
array.add("world");
array.add("java");
array.add("hello");
array.add(".net");
array.add("java");
array.add("java");
array.add("java");
array.add("php");
array.add("IOS");
array.add("java");
array.add("android");
//创建新集合
ArrayList array2 = new ArrayList();
//遍历旧集合,获取到每一个元素
Iterator it = array.iterator();
while(it.hasNext()){
String s = (String)it.next();
//在新集合中判断,看是否存在这个元素
if(!array2.contains(s)){
//如果s不再array2中存在,就添加
array2.add(s);
}
}
//array2就是没有重复元素的集合。
//遍历array2
for(int x=0; x<array2.size(); x++){
String s = (String) array2.get(x);
System.out.println(s);
}
}
}
ArrayList去除重复元素2
/*
* ArrayList如果存储的是学生,那么,怎么去除重复元素呢?
* 问题:如何知道学生是重复的。
* 需求:如果学生的姓名和年龄相同,我就认为是同一个学生。即重复值。
*
* 通过简单分析,我们估计是判断那里出问题了。
* 怎么办呢?
* 看判断的方法。
* 而我们又知道,判断的方法是API提供的。不是自己的写的。
* 看源码,看底层到底怎么实现的。
* 通过看源码,我们发现,底层依赖的是equals()。
* 由于学生类中,我们并没有equals()方法,所以,默认用的是Object的方法。
* 而Object类的方法,默认比较的是地址值。
* 由于学生对象都是new出来的,地址值肯定不一样,所以从这个角度考虑结论是正确的。
* 但是不符合我们的需求。
* 肿么办?
* 重写equals(),让他按照我们的需要来比较。
*/
ArrayList去除重复元素代码测试2
代码不做具体实现,在Student中重写equals方法。
@Override
public boolean equals(Object obj) {
// 提高效率
if (this == obj) {
return true;
}
// 提高健壮性
if (!(obj instanceof Student)) {
return false;
}
// 向下转换
Student s = (Student) obj;
return this.name.equals(s.name) && this.age == s.age;
}