如何使用Java创建数组列表

4
我有一个包含值为 {a,b,a,c,d,b,a} 的 arrayList。 我想比较列表中的每个元素并将 common indexespair 插入到一个 List of array 中,或者使用 Java 实现类似操作。
示例输出:[[0,2,6], [1,4]] 解释:a 出现在索引 0, 2, 6b 出现在索引 1, 4 到目前为止,我已经实现了以下代码:
    HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        List<String> name = new ArrayList<String>();
        letter.add("a");
        letter.add("b");
        letter.add("c");
        letter.add("b");
        letter.add("a");

         for (int i = 0; i < letter.size(); i++) {
            for (int j = 1; j < letter.size(); j++) {
                if (letters.get(i).equals(letters.get(j)) && i != j) {
                    hashMap.put(i, j);
                }
            }
        }
        System.out.println(hashMap); //o/p: {0=4, 1=3, 3=1}
        List<int[]> myList = new ArrayList<int[]>();
        Iterator entries = hashMap.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry entry = (Map.Entry) entries.next();
            Integer key = (Integer)entry.getKey();
            Integer value = (Integer)entry.getValue();
            myList.add(new int[] {key,hashMap.get(key)});
        }
        System.out.println(myList.toString()); 
        //O/P: [[I@380fb434, [I@668bc3d5, [I@3cda1055]

更新:我希望在myList中获取[[0,4],[1,3],[3,1]]作为元素,但我无法获得。非常感谢您的任何帮助!谢谢!

根据索引数组,我想比较不同的List BC中这些索引处的元素 - 比如在List BC中的索引0,2,6处比较元素,并检查所有三个元素是否相等。对于索引1,4处的元素也是同样。


https://dev59.com/_Wsy5IYBdhLWcg3wyw6i#8321984 - B K.
请使用Java内置的Comparator,看一下。 - Monis Majeed
你可以创建一个新的ArrayList,例如List<int[]> bList = new ArrayList<int[]>(); - Adan Vivero
@AdanVivero 我更新了问题,请查看并感谢您的回复。 - user6348718
3个回答

2
我想这会对你有所帮助:最初的回答。
    ArrayList<int[]> arrayList =new ArrayList<>();
    int[] arrayItem={0,2,6};
    int[] arrayItem2={1,4};
    arrayList.add(arrayItem);
    arrayList.add(arrayItem2);

1

Homework done, check this:

package com.company;

import java.util.*;

public class Main {

    public static void main(String[] args) {
    // write your code here
        HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        List<String> letter = new ArrayList<String>();
        letter.add("a");
        letter.add("b");
        letter.add("c");
        letter.add("b");
        letter.add("a");

        for (int i = 0; i < letter.size(); i++) {
            for (int j = 1; j < letter.size(); j++) {
                if (letter.get(i).equals(letter.get(j)) && i != j) {
                    hashMap.put(i, j);
                }
            }
        }
        System.out.println(hashMap); //o/p: {0=4, 1=3, 3=1}
        List<int[]> myList = new ArrayList<int[]>();
        Iterator entries = hashMap.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry entry = (Map.Entry) entries.next();
            Integer key = (Integer)entry.getKey();
            Integer value = (Integer)entry.getValue();
            int[] intValues = new int[2];
            intValues[0] = key;
            intValues[1] = value;
            myList.add(intValues);
        }

        String toPrint = new String();
        toPrint = toPrint.concat("[");
        for(int k = 0; k < myList.size(); k++) {
            toPrint = toPrint.concat("[");
            for(int l = 0; l < myList.get(k).length; l++) {
                toPrint = toPrint.concat(String.valueOf(myList.get(k)[l]));
                if(l != (myList.get(k).length-1)){
                    toPrint = toPrint.concat(",");
                }
            }
            toPrint = toPrint.concat("]");
        }
        toPrint = toPrint.concat("]");

        System.out.println(toPrint);
        //[[0,4][1,3][3,1]]
    }
}


如果你只需要在屏幕上打印值,那么这段代码适用于你。

1
我更新了问题,请检查并感谢您的回复。 - user6348718

0

您不能像检查String的所有索引那样使用Map。 您可以尝试以下使用ArrayList

import java.util.*;

public class ListCharIndexes {
    public static void main(String[] args) {
        List<String> letter = Arrays.asList("a","b","a","c","d","b","a");
       //letter= Arrays.asList("a","b","c","b","a");
        List<List<Integer>> result=new ArrayList<>();
        Set<String> result1=new HashSet<>();
        for (int i = 0; i < letter.size(); i++) {
            if(result1.add(letter.get(i))){ //skip String if it is already processed
                List<Integer> indexes=indexOfAll(letter.get(i), letter);
                if(indexes.size()>1)     //add only pairs
                    result.add(indexes);
            }
        }
        System.out.println(result);
    }
    static List<Integer> indexOfAll(String obj, List<String> list) {
        final List<Integer> indexList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++)
            if (obj.equals(list.get(i))) 
                indexList.add(i);
        return indexList;
    }
}

输出:

[[0, 2, 6], [1, 5]]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接