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

注意:

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

为什么呢?

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

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

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

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. 使用HyperV虚拟机装系统

    新建虚拟机 新建虚拟机 进行相关参数设置 选择系统安装镜像位置,名称及位置 指定代数一般为1代即可 为虚拟机运行分配内存 创建虚拟硬盘或连接已有虚拟硬盘,并分配硬盘空间 核对创建虚拟机相关信息 安装系 ...

  2. SharePoint 2013 点击"关注" 报错

    现象: 点击"关注" 报错. 解决办法: 1.确保bin文件夹下的.dll版本与web.config一致. 2.设置user porfile权限. 2.重启iis 结果如下:

  3. English Training Material - 01

    Building a relationship Cross-cultural understanding Eye contact In many Western societies, includin ...

  4. 如何在 在SharePoint 2013/2010 解决方案中添加 ashx (HttpHandler)

    本文讲述如何在 在SharePoint 2013/2010 解决方案中添加 ashx (HttpHandler). 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩 ...

  5. Stooge排序与Bogo排序算法

    本文地址:http://www.cnblogs.com/archimedes/p/stooge-bogo-sort-algorithm.html,转载请注明源地址. Stooge排序算法 Stooge ...

  6. iOS-UICollectionView的简单使用(原创)

    前言 UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最简单的形式).如果你用过iBook ...

  7. 关于C语言中单双引号的问题

    代码 #include<stdio.h> int main() { if ( "{" =='{' ) printf("True\n"); else ...

  8. iTerm和Alfred 2的安装和使用

    小贴士:本博文所有的下载资源都在文章末尾 当你下载好所有需要的资源之后,就可以安装这两个装逼神器了: iTerm的安装和使用 首先是安装终端相关的装逼神器 先把archey拷贝到bin目录下,补充图示 ...

  9. 关于配置并发访问的服务器apache、nginx

    一. apache,nginx比较     关于Apache与Nginx的优势比较  (apache计算密集型   nginx io密集型  各有优势,不存在谁取代谁) 二.nginx 基于nginx ...

  10. Memcache笔记04-Memcached机制深入了解

    Memcached机制深入了解 ①基于c/s架构 ,协议简单 c/s架构,此时memcached为服务器端,我们可以使用如PHP,c/c++等程序连接memcached服务器. memcached的服 ...