需求:去除集合中自定义对象的重复值(对象的成员变量值都相同

注意:

我们按照和字符串一样的操作,发现出问题了。

为什么呢?

我们必须思考哪里会出问题?

通过简单的分析,我们知道问题出现在了判断上。

而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。

contains()方法的底层依赖的是equals()方法。

而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法

Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。

按照我们自己的需求,比较成员变量的值,重写equals()即可。

自动生成即可。

分析:

A:创建动物类

B:创建一个含有动物类对象元素的集合

C:创建一个空集合

D:对动物类集合进行遍历,以及把遍历的元素放入空集合中,但要进行判断:空集合中是否含有这个元素

a:若有,则不放入

b:若没有,则放进去

E:对新的空集合进行遍历,输出

 package cn_ArrayList;

 import java.util.ArrayList;

 import java.util.Iterator;

 public class AnimalDemo {

     public static void main(String[] args) {

         //创建集合

         ArrayList al = new ArrayList();

         //定义成员对象

         Animal a1 = new Animal("猫", 2);

         Animal a2 = new Animal("荷兰猪", 1);

         Animal a3 = new Animal("老鹰", 4);

         Animal a4 = new Animal("鹦鹉", 2);

         Animal a5 = new Animal("警犬", 3);

         Animal a6 = new Animal("荷兰猪", 1);

         Animal a7 = new Animal("猫", 3);

         Animal a8 = new Animal("老鹰", 4);

         //把成员对象添加进集合中

         al.add(a1);

         al.add(a2);

         al.add(a3);

         al.add(a4);

         al.add(a5);

         al.add(a6);

         al.add(a7);

         al.add(a8);

         //创建新的空集合

         ArrayList alt = new ArrayList();

         //遍历第一个集合

         for(int x = 0; x < al.size(); x++){

             Animal a = (Animal)al.get(x);

             //判断空集合中是否包含这个元素

             if(!alt.contains(a)){

                 alt.add(a);

             }

         }

         //对第二个集合进行遍历输出,使用迭代器

         Iterator it = alt.iterator();

         while(it.hasNext()){

             Animal a = (Animal)it.next();

             System.out.println(a.getName()+"\t"+a.getAge());

         }

     }

 }

java 16-2 ArrayList的练习2的更多相关文章

  1. java 16 -11 ArrayList存储自定义对象并增强for遍历

    需求:ArrayList存储自定义对象并遍历.要求加入泛型,并用增强for遍历. A:迭代器 B:普通for     C:增强for LinkedList,Vector,Colleciton,List ...

  2. Java中的ArrayList的初始容量和容量分配

    List接口的大小可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大 ...

  3. Java LinkedList 和 ArrayList

    Java 手册 java.util 类 ArrayList<E> java.lang.Object java.util.AbstractCollection<E> java.u ...

  4. Java 16 中新增的 Stream 接口的一些思考

    这里先提一个题外话,如果想看 JDK 不同版本之间有何差异,增加或者删除了哪些 API,可以通过下面这个链接查看: https://javaalmanac.io/jdk/17/apidiff/11/ ...

  5. 【Java集合类】ArrayList详解 (JDK7)

    相信对于使用过Java的人来说,ArrayList这个类大家一定不会陌生. 数据结构课上讲过, Array是数组,它能根据下标直接找到相应的地址,所以索引速度很快,但是唯一的缺点是不能动态改变数组的长 ...

  6. Java集合干货——ArrayList源码分析

    ArrayList源码分析 前言 在之前的文章中我们提到过ArrayList,ArrayList可以说是每一个学java的人使用最多最熟练的集合了,但是知其然不知其所以然.关于ArrayList的具体 ...

  7. java集合之ArrayList源码解读

    源自:jdk1.8.0_121 ArrayList继承自AbstractList,实现了List.RandomAccess.Cloneable.Serializable. ArrayList内部是通过 ...

  8. Java基础系列-ArrayList

    原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...

  9. 浅谈Java语言中ArrayList和HashSet的区别

    Java语言中ArrayList和HashSet的区别 2019-04-10   13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...

  10. MD5、SHA1加密java 16位32位

    MD5.SHA1加密java 16位32位 import java.math.BigInteger; import java.security.MessageDigest; public class ...

随机推荐

  1. Linux初学者指南

    1.为啥我们要学习Linux? 我们干嘛要学习Linux? Linux能给我们带来什么价值呢? Linux给我的感觉就是稳定,免费,性能好. 稳定,体现在哪里?我们使用PC机,安装的操作系统一般是wi ...

  2. android:ellipsize实现跑马灯效果总结(转)

      最近无意间看到了涉及到跑马灯效果的代码,于是在网上查阅了很多资料,在这里对自己看的一些文章进行一下总结,顺便加上自己的一些体会. 让我们一步步逐渐向下. 首先我们要实现走马灯这样一个效果,通常来说 ...

  3. Automapper扩展方法

    问题描述 系统中实现了一个自定义的PagedList /// <summary> /// Paged list interface /// </summary> public ...

  4. miniSipServer简单而不简单,轻松落地,实现电脑对固话、手机通讯

    最近沉迷于SIP通讯,网内通讯全免费,落地也就几分钱,而且无漫游全国拨打,想想真是心动呢,只要有网落就ok!. 对于sipserver,现在的市场上软件很多,免费的.收费的应有尽有,这里不一一例举.综 ...

  5. 在SharePoint中无代码开发InfoPath应用: 获取当前用户信息

    很多种不同的场景下,会需要得到当前的用户信息,例如需要根据当前用户判断组,进而控制权限. 首先InfoPath提供了一个userName方法,来实现这个目的,不过这个方法的问题是只能获得不包含域名的用 ...

  6. 极光推送和百度lbs android sdk一起使用使用proguard 混淆的问题

    主要是http得类被混淆后,导致apk定位失败.经过确认,保留apache 的http类就好了 # To enable ProGuard in your project, edit project.p ...

  7. C99标准的新特性

    C语言标准的发展 C语言的发展历史大致上分为4个阶段:Old Style C.C89.C99和C11. C89是最早的C语言规范,于1989年提出,1990年先由ANSI(美国国家标准委员会,Amer ...

  8. CSS(一)

    开始学习css之旅:先照样式做一个 一.使用DIV设置 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  9. ARC-数据类型需要释放的情况

    // Foundation :  OC// Core Foundation : C语言// Foundation和Core Foundation框架的数据类型可以互相转换的 //NSString *s ...

  10. iOS开发之保存照片到自己创建的相簿

    iOS开发之保存照片到自己创建的相簿 保存照片还可以用ALAssetsLibrary,ALAssetsLibrary提供了我们对iOS设备中的相片.视频的访问,是连接应用程序和相册之间访问的一个桥梁. ...