0

我有一个声明的ArrayList a = [1,2,3]. 我ArrayLList b使用下面的循环创建了另一个:

for(int i = 0; i<a.size(); i++)
{
      for(int j=i+1; j<a.size();j++)
      {
              b.add("{" + a.get(i)+ "," + a.get(j) + "}");
      }
}

现在ArrayList b将包含元素[{1,2},{1,3},{2,3}]。现在,如果我使用 打印语句System.out.println(b.get(0)),那么输出将是{1,2}

现在我想进一步探索数组,以便我可以单独提取1和提取2。我怎样才能做到这一点?

4

4 回答 4

1

创建类对

class Pair{
String a 
String b
....
///setters and getters
} 

现在让 b 将List<Pair>改为调用b.add("{" + a.get(i)+ "," + a.get(j) + "}");您可以做简单的事情b.add(new Pair(a.get(i),a.get(j)); ,然后您不需要使用拆分字符串之类的东西,您可以通过执行 ie 轻松访问您的值b.get(0).getA()b.get(0).get()

您还可以将方法重写为成对的字符串

public String toString() {

    return "{" + a+ "," + b + "}";
}

因此,当您这样做时,System.out.println(a.get(0))您将获得与以前完全相同的输出

***编辑如果你想拥有一组超过 2 个元素的组,正如你在评论中所说,你可以构建你的类有点不同

class MyClass{ 
List<Integer> fields = new ArrayList<Integer>();
//two constructors
MyClass(int singleVal)
{
fields.add(singleVal);
}


MyClass(MyClass a, MyClass b)
{
fields.addAll(a.fields);
fields.addAll(b.fields);
}
//getters setters depends what you need


}

您的两个列表都将是 MyClass 的列表,当您填充列表 a 时,您使用第一个构造函数创建对象,当您想将元素添加到您的 b 列表时,您可以这样做b.add(new MyClass(a.(i),a.(j))),但您也可以这样做b.add(new MyClass(a.(i),b.(j)))b.add(new MyClass(b.(i),b.(j)))

于 2013-06-14T08:15:34.597 回答
0

您应该从逻辑中分解演示文稿。

在您的循环中,您创建一对元素。所以创建一个类型来表示它。

class Pair {

 private int left;
 private int right

 Pair(int left, int right) {
   this.left  = left;
   this.right = right;
 }

 public int getLeft() {
   return this.left;
 } 

 public int getRight() {
   return this.right;
 }

 @Override
 public void toString() {

     return String.format("{%d , %d}",getLeft(),getRight());
 }
}

列表列表 = 新的 ArrayList();

for(int i = 0; i<a.size(); i++)
{
      for(int j=i+1; j<a.size();j++)
      {
              list.add(new Pair(i,j));
      }
}

然后访问(提取)项目

int l = list.get(0).getLeft();
int r = list.get(0).getRith();

如果要在控制台上显示结果。

for(Pair p : list) {
  System.out.println(p);
}

关于输出格式


编辑

正如评论中提到的OP。他希望有灵活的数据结构,允许他存储数据。

List<List<Integer> parent = new ArrayList<List<Integer>()

for(int i = 0; i<a.size(); i++)
{

 List<Integer> child = new ArrayList<Integer>();

      for(int j=i+1; j<a.size();j++)
      {
              child.add(a.get(i));
              child.add(a.get(j));
      }

  parent.add(child);
}
于 2013-06-14T09:16:40.463 回答
0

我知道您的数组b只包含字符串。使用任何字符串标记化机制来实现这一点 - String.splitStringTokenizer

提示:StringTokenizer 性能更好

于 2013-06-14T08:08:44.177 回答
-1
String ele = b.get(0);
ele = ele.replace("{", "");
ele = ele.replace("}", "");
StringTokenizer tokens = new StringTokenizer(ele, ",");
while(tokens.hasMoreTokens()) {

    int val = Integer.parseInt(tokens.nextToken());
}
于 2013-06-14T08:10:32.507 回答