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

注意:

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

为什么呢?

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

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

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

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. [CLK Framework] CLK.Threading.PortableTimer - 跨平台的Timer类别

    [CLK Framework] CLK.Threading.PortableTimer - 跨平台的Timer类别 问题情景 开发应用程式的时候,免不了需要加入一些定时执行的设计,例如说:定时更新画面 ...

  2. java微信开发(wechat4j)——得到微信请求参数

    微信平台会在请求的post数据中带有一些参数,例如用户的openid之类的信息,当你使用了wechat4j之后,得到这些信息是非常方便的. public class Lejian extends We ...

  3. 【翻译】Netscaler真实表现性能调整

    源地址:https://msandbu.wordpress.com/2014/10/31/netscaler-and-real-performance-tuning/ 作者显然不是以英语为母语的,所以 ...

  4. jquery常用选择器

    1.数字性过滤 $("tr:first")               //选择所有tr元素的第一个 $("tr:last")                / ...

  5. CSS3选择器(二)--表单

    :enabled 选择可用状态的表单元素 :disabled 选择不可用状态的表单元素 :checked 复选框.单选框选中状态的选项 ::selection 用来匹配突出显示的文本(用鼠标选择文本时 ...

  6. 解决连接Oracle 11g报ORA-01034和ORA-27101的错误

    参考文献: http://10000001.blog.51cto.com/4600383/1248367 背景: 使用sqlplus连接oracle,提示ORA-01034和ORA-27101,具体内 ...

  7. Android 开发前的基本的配置及第一个Android 程序

     一.JDK 1. 网上下载JDK 2.   配置环境变量(网上百度相关资料)       JAVA_HOME=D:\Java\jdk1.8.0_91       CLASSPATH=.;%JAVA_ ...

  8. iOS 核心动画

    核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...

  9. iOS使用Workspace来管理多项目

    开发中会有一些常用的类或方法,或者是某个特定功能的,比如一个自定义的弹框.一个更容易使用的网络请求库,可以把它们放到一个单独的工程里,通过静态库(library.FrameWork)的方式应用到任何其 ...

  10. android 之 adb 启动问题的一般解决办法

    有时,当我们打开eclipse准备运行Android项目时,虚拟机会启动不了,并且会出现下面的报错. [2015-10-07 16:47:46 - Game2048] ---------------- ...