【发布时间】:2014-05-15 08:06:21
【问题描述】:
所以我在向 ArrayList 添加元素时遇到了这个问题
我有一个类 Media 有 3 个字段,另一个类 Mediatheque 有 1 个字段(这是一个 ArrayList)。
假设我有:
Mediatheque media = new MediathequeMedia类中的一个equals(Media m)方法
我需要写一个方法add(Media m):
- 如果
media.contenu确实包含一个元素equals到我想添加的Media m,我不能添加它并增加media.contenu中包含的元素的nbEx字段
-否则我可以使用ArrayList提供的add方法添加它(这似乎不太难)
所以我尝试编写一个contains(Media) 方法,它使用我为Media 类编写的equals(Media m) 方法,然后在add 方法中使用contains 方法。
我的问题是我应该如何编写add 方法?
我必须用ArrayList 写这个,这是一个学校作业
抱歉,代码太长,英语不好,我完全是菜鸟。
这是我的Media 班级:
package Ex1;
public class Media {
private final String support; // Format: Book, CD, DVD,etc...
private final String titre; // Title
private int nbEx; // Number of copy
public Media(String titre, String support){
this.titre = titre;
this.support = support;
this.nbEx = 1;
}
public Media (){
titre = "";
support = "";
nbEx = 0;
}
public boolean equals(Media m){
boolean equality = false;
if (m instanceof Media){
equality = (this.titre.equals(m.titre) && this.support.equals(m.support));
}
return equality;
}
public Media(Media m){
this.titre = m.titre;
this.support = m.support;
}
}
这是我的Mediatheque 课程:
import java.util.ArrayList;
import static java.lang.System.out;
public class Mediatheque {
ArrayList<Media> contenu;
public Mediatheque(){
this.contenu = new ArrayList<Media>();
}
public Mediatheque(Mediatheque m){
this.contenu = m.contenu;
}
public boolean contains(Media m){
int i = 0;
boolean contain = this.contenu.get(i).equals(m);
for(i = 0; i<this.contenu.size(); i++){
if(contain)
break;
}
return contain;
}
public int indexOf(Media m){
boolean retVal = this.contenu.get(i).equals(m);
for(Media i : contenu){
if(contain)
break;
}
return i;
}
public void add(Media m){
if(this.contains(m)){
this.contenu.get(this.contenu.indexOf(m)).setNbEx(this.contenu.get(this.contenu.indexOf(m)).getNbEx()+m.getNbEx());
}else{
this.contenu.add(m);
}
}
我的问题是我应该如何编写add 方法?
对不起,代码太长,英语不好,我是一个完全的菜鸟。
谢谢!
【问题讨论】:
-
这里的限制到底是什么?
Media类中的标题,还是support和nbEx也算? -
你为什么要为
ArrayList#contains重新发明轮子? -
既然你已经实现了
equals方法,为什么不直接使用ArrayList.contains呢? -
我认为你应该修改你的数据模型。将多个副本存储在 Media 对象中没有多大意义(据我所知,Media 的实例是一个项目)。例如使用
Map<Media, Integer>会更清晰(更快)。并且只增加地图中的数字。您正在创建一个类似集合的新数据结构,但您可能应该重用 JDK 提供的内容。 -
你的 equals 方法应该接受一个对象作为参数
标签: java arrays arraylist add contains