[英]JAVA fill a temporary Arraylist with objects and then add it into a ArrayList which consists of arrayLists
我遍歷一個由對象組成的數組。 我想找到此數組的某些部分,其中相同的特定對象彼此跟隨。
[a,b,c,#,#,#,h,g,a,#,#,s,#。h]->我要查找#,#,#和#,#(#是特定的賓語)
我已經弄清楚了如何執行此操作:如果找到一個“#”,則將該對象添加到臨時ArrayList中。 如果下一個對象也是“#”,我也將其添加,否則我將清除tmplist,因為它是單個“#”。 如果下一個對象不是#,但是tmplist大於1,我想將tmplist添加到2d ArrayList(由ArrayList組成的ArrayList)中,並清除tmplist,以便我可以找到其他部分。
這是我的問題:如果執行此操作,則2d arraylist不會包含臨時列表的深拷貝-> 2d arraylist包含空列表,因為我會在找到每個“模式”之后清除tmplist。 我怎樣才能解決這個問題?
一些代碼可能會更好地解釋它:
List<Object> tmplist = new ArrayList<Object>();
for (int i = 0; i<array.length(); i++) {
if (array[i].equals(#)) {
tmplist.add(array[i]);
if (!array[i+1].equals(#) && tmplist.size() < 2){
tmplist.clear();
} else if (!array[i+1].equals(#) && tmplist.size() > 1) {
pattern.add(tmplist);
tmplist.clear();
}
}
}
//pattern is the 2d ArrayList (ArrayList which consists of ArrayLists)
如果您的2d ArrayList為: result
做
result.add(new ArrayList<>(tmpList));
這樣,您將不會添加tmpList
本身,而是添加一個具有tmpList
值的新列表。 因此,即使您執行tmpList.clear()
,也不會影響result
的arraylist。
不是執行tmplist.clear()
而是執行tmplist = new ArrayList<>()
因此您每次都使用不同的List實例。
我認為最簡單的解決方案是不清除列表,而是在將其添加到列表列表之后,將新的ArrayList引用分配給tmplist。
好吧..我知道您現在必須已經使用建議進行了整理。...但是我只是想我要編寫程序來執行此操作……這就是我的解決方案的樣子,而不是最好的解決方法,但應該可以...
import java.util.ArrayList;
import javax.swing.text.rtf.RTFEditorKit;
public class ArrTest {
public static void main(String[] args) {
String[] text = new String[] { "a","#","#","b", "c", "#", "#","#", "b", "3", "3" };
Map<Integer, List<String>> retMap = new HashMap<Integer, List<String>>();
List<String> repeatString;
int count = 0;
for (int i = 1; i < text.length; i++) {
if(text[i].equals(text[i-1])){
repeatString = new ArrayList<String>();
repeatString.add(text[i]);
for(int j=i;j<text.length;j++){
if(text[j].equals(text[i])){
repeatString.add(text[j]);
} else {
break;
}
}
retMap.put(count, repeatString);
count++;
i++;
}
}
Iterator<Integer>iter = retMap.keySet().iterator();
while(iter.hasNext()){
System.out.println(retMap.get(iter.next()));
}
}
}
希望有幫助:)
:
[#,#]
[#,#,#]
[3,3]
您的代碼根據@heenenee的答案進行了修改:
List<Object> tmplist = new ArrayList<Object>();
for (int i = 0; i<array.length(); i++) {
if (array[i].equals(#)) {
tmplist.add(array[i]);
if (!array[i+1].equals(#) && tmplist.size() < 2) {
tmplist.clear();
} else if (!array[i+1].equals(#) && tmplist.size() > 1) {
pattern.add(tmplist);
tmplist = new ArrayList<Object>(); // Easy changes here
}
}
}
//pattern is the 2d ArrayList (ArrayList which consists of ArrayLists)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.