我编写了这段代码。我认为这是错误的。
public void display() {
for (int i = 0; i < tabT.length; i++)
if (tabT[i] != null)
for (int j = 0; j <= i; j++)
if (tabT[i] != tabT[j])
System.out.println(tabT[i].getCar());
}
如何在数组中显示没有冗余的元素?
如果您只想使用数组,您可以这样做:
创建一个临时(helper)数组,它将包含到目前为止在tabT
中看到的每个元素。然后,在打印该值之前,检查它是否没有出现在helper数组(tmp)中。
例如,如果您在tabT
中有值,并且您不想将每个值打印多次:
int[] tabT = {1,2,3,1,1,2,6,7,2,7,1};
int[] tmp = new int[tabT.length];
boolean flag;
for (int i = 0; i < tabT.length; i++) {
tmp[i] = tabT[i];
flag = true;
for (int j = 0; j < tmp.length; j++)
if (tabT[i] == tmp[j] && i!=j) {
flag = false;
}
if(flag)
System.out.println(tabT[i]);
}
输出:(1、2、3、6、7)
您可以很容易地将这个想法应用到您的程序中,并且每个元素只打印一次:
Cars[] tmp = new Cars[tabT.length]; //Assuming tabT is from type Cars[]
boolean flag = true;
for (int i = 0; i < tabT.length; i++) {
tmp[i] = tabT[i];
if (tabT[i] != null) {
for (int j = 0; j < tmp.length; j++)
if (tabT[i].getCar().equals(tabT[j].getCar()) && i!=j)
flag = false;
if(flag)
System.out.println(tabT[i].getCar());
}
}
这将只打印每辆车(或任何你要打印的)一次。
通过equals()
进行对象比较例如
if (!tabT[i].equals(tabT[j]))
比较的是引用值而不是对象
for (int i=0; i< tabT.length; i++) {
boolean f = false;
for (int j=i+1; j <tabT.length; j++)
if (tabT[i].equals(tabT[j])) {
f=true;
break;
}
if (!f)
System.out.println(tabT[i].getCar());
}
这将为您提供i
和j
的所有非重复组合,因此我们不会多次比较它们。
==
和!=
在对象级别测试相等性(即,如果两个实例相同)。你所需要的是比较每个对象所代表的值(例如,如果两个字符串相等),然后你需要询问!tabT[i].equals(tabT[j])
,并使tabT
的元素实现equals
)。
或将数组转换为集合,从而删除重复项。
T[] tabT = ...
Set<T> set = new LinkedHashSet<T>(Arrays.asList(tabT))
for (T t:set) System.out.println(t);
我使用LinkedHashSet
是因为它保留了数组中元素的顺序。注意,您需要实现equals
和hashcode
。
将tabT数组放入Set中。不会有重复的项目。
Set tabTList = new HashMap(Listjava.util.Arrays.asList(tabT);
为什么不试试呢?(我假设你正在使用String类型)
HashSet<String> hashSet = new HashSet<String>();
for (int i = 0; i < tabT.length; i++) {
hashSet.add(tabT[i]);
}
你不能在集合中有重复项,所以现在你可以迭代集合来获得唯一。
java.util.Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
System.out.println((String)iterator.next());
}
如果需要跟踪重复计数,可以考虑使用HashMap。通过数组迭代一次,将具有各自计数的对象放入HashMap中。然后根据HashMap再次遍历数组。这是O(n)时间而不是O(n^2)