比较列表和数组

时间:2013-07-04 18:39:18

标签: java

我需要将List中的值与array中的值进行比较。 我写了以下内容:

public class JavaApplication3 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic hereut
    List<String> l = new ArrayList<String>();
    l.add("test");
    l.add("b");
    String v = "";
    String s = "";
    String[] arr = {"test", "c", "b"};

    for (int i = 0; i < l.size(); i++){
        v = "";
        s = "";
        //System.out.println(l.get(i));
        for (int j = 0; j < arr.length; j++){
            if (l.get(i).equals(arr[j])){
                s = i + "";
            }else{
                s = arr[i];
            }
            v = v + s + ",";                   
        }  
        System.out.println(v);          
    }

}

}

我获得以下内容 0,测试,测试, C,C,1 但我需要这样的结果: 0,c,1,

5 个答案:

答案 0 :(得分:1)

看看你的预期结果我猜这样的要求:

对于数组中的每个元素,检查它是否在列表中。如果它在列表中,则从该元素的列表中打印索引,否则打印元素本身。所以算法应该这样做:

array[0] = "test" -> found at index 0 -> print "0"
array[1] = "c"    -> not found        -> print "c"
array[2] = "b"    -> found at index 1 -> print "1"

外部循环应遍历数组。然后,对于每个数组项,迭代列表,直到找到相同的元素。对于初稿,不要将字符串中的输出收集,而是立即打印。您可以在算法按预期工作时创建字符串。

答案 1 :(得分:0)

这个怎么样:

 public static void main(String[] args) {
        // TODO code application logic hereut
        List<String> l = new ArrayList<String>();
        l.add("test");
        l.add("b");
        String v = "";
        String s = "";
        String[] arr = {"test", "c", "b"};
        int pointer = 0;
        for (int i = 0; i < l.size(); i++){
                        //System.out.println(l.get(i));
            for (; pointer < arr.length;){
                if (l.get(i).equals(arr[pointer])){
                    s = i + "";
                    v = v + s + ",";
                    pointer++;
                    break;
                }else{
                    s = arr[i];
                }
                pointer++;
                v = v + s + ",";
            }

        }
        System.out.println(v);

    }

答案 2 :(得分:0)

你有六次迭代,每次迭代都会在输出中插入一些东西。

您需要三次迭代,每次迭代都会检查第一个列表中的成员身份。您可以使用List.contains()方法执行此操作。 (如果列表很长,您可能需要考虑使用Set而不是List,以便更快地检查集合成员资格。)

答案 3 :(得分:0)

尝试将事情分解为高级别的步骤。

For each string in the array
    find its place in the list
    if the item is in the list
        print its position
    else
        print the missing string
    print a common and space

一旦你有了这个,你可以发现find its place in the list可以是一个返回列表中的位置的方法,或者如果它不在列表中则为-1。这就是我所做的(可能已经重命名了一些东西并使用了StringBuilder,但你现在可以忽略它)。

import java.util.ArrayList;
import java.util.List;

public class Example {
    public static void main(final String[] args) {
        final List<String> listToSeach = new ArrayList<String>();
        listToSeach.add("test");
        listToSeach.add("b");

        final String[] arrayElementsToFind = { "test", "c", "b" };

        final StringBuilder output = new StringBuilder();
        for (final String string : arrayElementsToFind) {
            final int firstIndex = findFirstIndex(listToSeach, string);
            if (firstIndex > -1) {
                output.append(firstIndex);
            } else {
                output.append(string);
            }
            output.append(", ");
        }
        System.out.println(output);
    }

    private static int findFirstIndex(final List<String> list,
            final String element) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals(element)) {
                return i;
            }
        }
        return -1;
    }
}

答案 4 :(得分:0)

我建议这样做:

     List<String> l = new ArrayList<String>();
     l.add("test");
     l.add("b");
     String[] arr = {"test", "c", "b"};

     for(int i=0;i<arr.length;++i){

       if(l.contains(arr[i]))
         s = ""+l.indexOf(arr[i]);
       else
         s = arr[i];

       v = v + s + ",";
      }

如果得到你所说的正确,我认为这不那么冗长