java 16-2 ArrayList的练习2
需求:去除集合中自定义对象的重复值(对象的成员变量值都相同
注意:
我们按照和字符串一样的操作,发现出问题了。
为什么呢?
我们必须思考哪里会出问题?
通过简单的分析,我们知道问题出现在了判断上。
而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。
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的更多相关文章
- java 16 -11 ArrayList存储自定义对象并增强for遍历
需求:ArrayList存储自定义对象并遍历.要求加入泛型,并用增强for遍历. A:迭代器 B:普通for C:增强for LinkedList,Vector,Colleciton,List ...
- Java中的ArrayList的初始容量和容量分配
List接口的大小可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大 ...
- Java LinkedList 和 ArrayList
Java 手册 java.util 类 ArrayList<E> java.lang.Object java.util.AbstractCollection<E> java.u ...
- Java 16 中新增的 Stream 接口的一些思考
这里先提一个题外话,如果想看 JDK 不同版本之间有何差异,增加或者删除了哪些 API,可以通过下面这个链接查看: https://javaalmanac.io/jdk/17/apidiff/11/ ...
- 【Java集合类】ArrayList详解 (JDK7)
相信对于使用过Java的人来说,ArrayList这个类大家一定不会陌生. 数据结构课上讲过, Array是数组,它能根据下标直接找到相应的地址,所以索引速度很快,但是唯一的缺点是不能动态改变数组的长 ...
- Java集合干货——ArrayList源码分析
ArrayList源码分析 前言 在之前的文章中我们提到过ArrayList,ArrayList可以说是每一个学java的人使用最多最熟练的集合了,但是知其然不知其所以然.关于ArrayList的具体 ...
- java集合之ArrayList源码解读
源自:jdk1.8.0_121 ArrayList继承自AbstractList,实现了List.RandomAccess.Cloneable.Serializable. ArrayList内部是通过 ...
- Java基础系列-ArrayList
原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...
- 浅谈Java语言中ArrayList和HashSet的区别
Java语言中ArrayList和HashSet的区别 2019-04-10 13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...
- MD5、SHA1加密java 16位32位
MD5.SHA1加密java 16位32位 import java.math.BigInteger; import java.security.MessageDigest; public class ...
随机推荐
- Android Xutils 框架(转)
Android Xutils 框架 (转) 目录(?)[-] xUtils简介 目前xUtils主要有四大模块 使用xUtils快速开发框架需要有以下权限 混淆时注意事项 DbUtils使用方法 Vi ...
- new 小记
new运算符 能根据需求来创建对象的实例 通过与构造函数和一系列初始化过程中使用的可选参数来创建对象的实例,对象创建完成后,新创建的对象继承自构造函数的原型 function Person(name) ...
- js判断用户的浏览器设备是移动端还是pc端
最近做的一个网站页面中需要根据用户的访问设备的不同来显示不同的页面样式,主要是判断移动设备还是电脑浏览器访问的. 下面给出js判断处理代码,以作参考. <script type="te ...
- 来自 CORS 预检通道的 CORS 头 'Access-Control-Allow-Headers' 的令牌 'appkey' 无效)。
1.服务端: web.config文件中: <system.webServer> <httpProtocol> <customHeaders> <add na ...
- IOS中的多核并发编程GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...
- Web应用程序系统的多用户权限控制设计及实现-用户模块【7】
前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的基本模块-用户模块.用户模块涉及到的数据表为用户表. 1.1用户域 为了更规范和方便后期系统的二次开发和维护 ...
- JDBC demo
package com.zhangbz.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...
- 自学 iOS – 三十天三十个 Swift 项目
自学 iOS – 三十天三十个 Swift 项目 github源码地址:https://github.com/allenwong/30DaysofSwift
- ruby语言是什么东西
1.简介 Ruby是日本的Yukihiro Matsumoto写的,简单易学的面向对象的脚本语言,像perl一样,有丰富的文字处理.系统管理等丰富 功能,但是ruby要简单,容易理解和扩充.跟p ...
- LeetCode 6 ZigZag Conversion(规律)
题目来源:https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is writt ...