2014-11-09 91 views
1

我有一个listOfStrings,并且我想要创建一个新的listOfStringsTwo(这两个列表都是ArrayLists),其中每个元素连续地连接到下一个元素。这里有一个例子:随后添加元素到数组

如果原来listOfStrings有元素“喜”,“你好”和“再见”时,listOfStringsTwo将有以下为它的元素:

listOfStringsTwo.get(o) would give "hi" 
listOfStringsTwo.get(1) would give "hi" "hello" 
listOfStringsTwo.get(2) would give "hi" "hello" "bye" 

我觉得好像我需要使用for循环,但我很不确定如何继续。我已经看过Java文档和无数的教程,但我仍然坚持这个看似简单的问题。


这是我的计算器上的第一篇文章,所以请,如果我的问题是错误的类型,或者如果有任何问题,请不要让我知道!我自己在学习Java,并陷入了一个整洁的境地。

+0

你有没有考虑打电话给你的名单上的子列表? – user902383 2014-11-09 08:35:53

+0

顺便说一句,你使用任何教科书,视频教程或大学课程学习? – 2014-11-09 08:38:30

+0

是的,我在波斯语中使用了一本教科书。不幸的是,它在网上不可用,但它在我的母语中。没有子列表,有没有不同的方式去解决这个问题?更多手动本身? – nicefella 2014-11-09 08:43:13

回答

2

编辑:请参阅我的答案底部的更新。

如果我明白你想达到什么样的,那么这里的情况是:

original.get(0) gives "hi" 
    original.get(1) gives "hello" 
    original.get(2) gives "bye" 

,你想有一个第二列表,从原来的,但在累积的方式复制项目:

seocnd.get(0) gives "hi" 
    seocnd.get(1) gives "hi hello" 
    seocnd.get(2) gives "hi hello bye" 

的这里是这样做的一个办法:

List<String> originalList = new List<String>(); 

originalList.add("hi"); 
originalList.add("hello"); 
originalList.add("bye"); 

List<String> listofStringsTwo = new List<String>(); 

for (int i=0; i<original.size ; i++) 
{ 
    String temp = ""; 
    for (int j=0;j<=i;j++) 
    { 
    temp += original.get(j) + " "; 
    } 
    listofStringsTwo.add(temp); 
} 

更新:如果您需要包括第四eleme nt添加到列表中,然后将其正常添加到原始文件中。它将被自动添加到第二个列表的第四个元素,而不必调整它下面的代码。

originalList.add("hi"); 
originalList.add("hello"); 
originalList.add("bye"); 
originalList.add("goodbye"); 
+0

快速跟进问题,如果我只是想添加一个字符串,在最后迭代处说“再见”,方法会如何改变? @Ahmad – nicefella 2014-11-09 09:40:53

+0

@nicefella查看我的更新回答 – Ahmad 2014-11-10 10:19:23

1

运行时间复杂度为O(n)的

public static void main(String[] args) { 
    List<String> listOfStrings = new ArrayList<>(); 
    listOfStrings.add("hi"); 
    listOfStrings.add("hello"); 
    listOfStrings.add("bye"); 

    List<String> listOfStringsTwo = new ArrayList<>(); 

    StringBuilder sb = new StringBuilder(); 
    for(String str: listOfStrings) { 
     sb.append(str).append(" "); 
     listOfStringsTwo.add(sb.toString()); 
    } 

    System.out.println(listOfStringsTwo); 
} 
1

所以,你有两个选择(我认为你应该扩展现有的ArrayList类 - 的开始):

  1. 更多的内存贵,但更快地访问第N个元素

这一个会更加昂贵因为您的列表将始终存储所有连接的条目,但也会为您提供更快速的访问。

将新元素添加到列表末尾时,只需获取N-1元素并将其与新值连接(N-1将始终包含所有先前的单词)并将其存储在末尾。

  • 更耗时的 “get” 方法,但对存储器
  • 覆盖 “得到(INT指数)” 的方法更容易,并执行整个级联那里 - 更少像艾哈迈德之前写的。

    对于较小的N值,两种解决方案的工作方式几乎完全相同。