06Java语法collection之arraylist续01

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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值