JAVA:首先,非常感谢您花时间看我的问题;非常感谢您的帮助!
所以,问题是我在Java中有一个对象向量,每个对象都有一个名称(String)。但是,我有大量重复的对象,重复的对象总是直接在它们重复的对象之后。重复次数的范围从1-10(如此令人沮丧)到完全随机。
我如何删除重复项,我考虑将每个对象名称与向量中的下一个对象名称进行比较,并删除所有匹配但又给我带来大量问题的对象名称。非常感谢你的帮助!
-Dylan
编辑:只是为了确保你理解我正在谈论的那种重复我添加了这个。
编辑2:添加代码
public class Vector
{
public static void main(String args[])
{
Person person1 = new Person("jane");
Person person2 = new Person("jane");
Person person3 = new Person("bob");
Person person4 = new Person("shelly");
Vector<Person> vectorObject = new Vector<Person>
vectorObject.add(person1);
vectorObject.add(person2);
vectorObject.add(person3);
vectorObject.add(person4);
}
}
class Person
{
String name = null;
String bDay = null;
String color = null;
public Person(String name)
{
this.name = name;
}
}
答案 0 :(得分:1)
您似乎应该使用不同的数据结构。
您可能想要使用Set而不是Vector。集不包含重复元素。您必须覆盖equals(Object)
方法。
或者使用名称属性为Map作为键值,并将相应的Person对象存储为值。
在这两种情况下,您都可以防止重复,而不是之后删除它们。
Person person1 = new Person("jane");
Person person2 = new Person("jane");
Person person3 = new Person("bob");
Person person4 = new Person("shelly");
Map<String, Person> nameToPerson = new HashMap<>();
nameToPerson.add(person1.name, person1);
nameToPerson.add(person2.name, person2);
nameToPerson.add(person3.name, person3);
nameToPerson.add(person4.name, person4);
Collection<Person> noDuplicatesHere = map.values();
答案 1 :(得分:0)
好吧,我不知道你使用的是哪种语言,所以我会用JavaScript给你一个算法:
var newvector=new Array();
var lastName;
for(var i=0;i<vector.length;i++){
if(!lastName || vector[i].name!=lastName){
lastName=vector[i].name;
newvector.push(vector[i]);
}
}
问题在于,这样就会创建一个新的矢量,如果原始矢量很大,可能会出现内存问题。
答案 2 :(得分:0)
这是你的第一个问题:
class Person
{
String name = null;
String bDay = null;
String color = null;
public Person(String name)
{
name = this.name;
}
}
它应该是:
class Person
{
String name = null;
String bDay = null;
String color = null;
public Person(String name)
{
this.name = name;
}
}
以下是this
关键字的更多信息:
你的第二个问题是:我猜你正在尝试创建一个Vector,java.util.Vector。如果在名为vector的类中创建Vector的新实例,它将创建自身的新实例,而不是java.util.Vector。您可以重命名该课程,也可以这样做:
java.util.Vector<Person> vector = new java.util.Vector<Person>();
如果要比较2个字符串值,请使用:
String name = "John";
String name2 = "Joe";
if(name.equalsIgnoreCase(name2))
System.out.println("They match!");
如果想要完全匹配,也可以使用equals()。
希望这有帮助!