[英]How to conduct permutation using an arraylist
我試圖將arraylist中的第一個元素與其余元素進行比較。
然后將arraylist的第二個元素與其余元素進行比較,依此類推
arraylist的結尾。
代碼如下:
ArrayList<String> a = new ArrayList<String>();
a.add("G1");
a.add("G2");
a.add("G3");
a.add("G1");
System.out.println(a.size());
for(int i = 0; i<a.size(); i++){
for(int j = 0; j<a.size(); j++){
if(a.get(i) == a.get(j))
System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);
}
}
==
是引用相等(例如,這兩個對象指向內存中的相同位置)。 對於對象相等,請改用.equals()
。
使用此代碼而不是您的代碼。
for(int i = 0; i<a.size()-1; i++){
for(int j = i+1; j<a.size(); j++){
if(a.get(i).equals(a.get(j)))
System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);
}
希望有幫助.. :)
采用
if((a.get(i)).equals(a.get(j)))
代替
if(a.get(i) == a.get(j))
Morover開始初始化j = i+1
您已經檢查了這些前一個字符串,因此無需再次啟動它。
編輯
你必須將你的外部循環限制為i<a.size()-1
這樣它就不會檢查最后一個元素。
我希望這有幫助。 如果您需要幫助,請問。
在你的情況下,因為你正在使用字符串,而不是使用= =,這是引用相等,因為內存地址相同,你想使用.equals()
,它將比較兩個字符串的實際值。
至於你的for-loop,你可以通過這樣做來提高效率。
for (int i = 0; i < a.size()-1; i++)
{
for (int j = i+1; j < a.size(); j++)
{
if(a.get(i).equals(a.get(j)))
{
System.out.println("Element: " + a.get(i)+ " at " + i + " and " + "Element: "+ a.get(j)+ " at " + j);
}
}
}
由於有時您已經將[i]與[j]進行比較,如果您執行[j]等於[i],結果將是相同的,因此您可以跳過它們。 當j和i相同時,這也可以避免檢查[i]等於a [j]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.