这是一个学校的家庭作业实验室。我试图扭转一个LinkedList,并检查它是否是一个回文(相同的后退和前进)。我在网上看到了类似的问题,但没有多少帮助我解决这个问题。我制作了一些程序来检查回文,但没有检查数组或列表。因此,首先,这是我isPalindrome方法:isPalindrome - 收集和列表反转
public static <E> boolean isPalindrome(Collection<E> c) {
Collection<E> tmp = c;
System.out.println(tmp);
Collections.reverse((List<E>) c);
System.out.println(c);
if(tmp == c) { return true; } else { return false; }
}
我的教授要我们设置方法为接受所有集合这就是为什么我用收集并投它作为反向方法的名单,但我米不知道这是否正确完成。我知道它确实颠倒了名单。这是我的主要方法:
public static void main(String...strings) {
Integer[] arr2 = {1,3,1,1,2};
LinkedList<Integer> ll2 = new LinkedList<Integer>(Arrays.asList(arr2));
if(isPalindrome(ll2)) { System.out.println("Successful!"); }
}
的问题是,我有一个数组,它是不是一个回文测试这一点,这意味着它不向后一样,因为它是前锋。我已经使用数组{1,3,1}对其进行了测试,并且它正常工作,因为这是一个回文。使用{1,3,1,1,2}仍然会为回文返回true,但显然不是。下面是使用{1,3,1,1,2}阵列我的输出:
[1, 3, 1, 1, 2]
[2, 1, 1, 3, 1]
Successful!
所以,这似乎是正确的扭转名单,但是当它们进行比较,它假定他们是平等的吗?我相信tmp == c有一个问题,它是如何检查它们是否相等。我认为它只是检查它是否包含相同的元素,但我不确定。我也试过tmp.equals(c),但它返回了相同的结果。我只是好奇,是否有另一种方法,我可以使用或者我必须编写一个方法来比较tmp和c?
预先感谢您! 汤米
首先,如果'收藏C'不是'List',当您执行'(列表)c'时,您将遇到'ClassCastException'。 –
cheb1k4
@ cheb1k4有没有一种方法可以让Collections.reverse()接受一个Collection? –
不,你不能,'Collections.reverse'只接受一个'List'。你必须找到另一种方式。也许你可以用https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#reverseOrder() – cheb1k4