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 ...
随机推荐
- gulp入坑系列(4)——gulp的代码转换
当然,gulp不仅仅能转换Sass,这里会提到如下转换: jsx转换成常规的JavaScript(说到jsx,玩过react的同学应该是知道的) es6转换为es5 Less,Sass转换为CSS 首 ...
- C语言指针传递详解
传递指针可以让多个函数访问指针所引用的对象,而不用把对象声明为全局可访问,要在某个函数中修改数据,需要用指针传递数据,当数据是需要修改的指针的时候,就要传递指针的指针,传递参数(包括指针)的时候,传递 ...
- 多种cell混合使用
有时候我们会碰到一个tableView上有多种cell,这个时候就需要定义多种cell,根据条件判断,当满足某个条件的时候选择某个cell 先看plist文件: Person.h #import &l ...
- 【原】训练自己haar-like特征分类器并识别物体(2)
在上一篇文章中,我介绍了<训练自己的haar-like特征分类器并识别物体>的前两个步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本描述文件 3.训练样本 4.目标识别 == ...
- iOS之 随笔Xcode7的lipo
此文是学习所用,若要转载请注明出处 Xcode的lipo xcrun -sdk iphoneos lipo Xcode7以后lipo存放位置变化 /Applications/Xcode.app/Con ...
- ASP.NET @Page指令属性(vs2010)
最近看一篇好文章,摘抄下来. 原文出处:http://www.cnblogs.com/zhaozhan/archive/2010/05/01/1725819.html @Page指令位于每个ASP.N ...
- 故障时自动重启Apache
最近不知道为什么博客总是莫名其妙地挂掉, 重启Apache就好了,我也懒得去研究到底是哪里出了问题. 只是每次都需要手工SSH上去重启Apache,有点麻烦. 而且有时候在夜里挂掉,一晚上博客就都不能 ...
- Android Studio 有用的插件
从Eclipse切换到Android Studio 有一段时间了,发现as同,github,已经很多插件的集合有强大的合成效应. 安装插件请参考:http://blog.csdn.net/hyr839 ...
- python sorted
python列表排序 python字典排序 sorted List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: sorted(data, cmp=None, key ...
- openswitch db files
http://openvswitch.org/support/dist-docs/ovsdb-tool.1.html FILES The default db is /etc/openvswitch/ ...