我声明了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
。我怎样才能做到这一点?
答案 0 :(得分: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));
然后你不需要玩分裂字符串和类似的东西,你可以通过做b.get(0).getA()
或b.get(0).get()
您还可以将方法覆盖为对
中的字符串public String toString() {
return "{" + a+ "," + b + "}";
}
所以当你System.out.println(a.get(0))
时,你会得到与之前完全相同的输出
*** EDIT 如果你想要一个超过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)))
答案 1 :(得分:0)
我知道你的数组b
只包含字符串。使用任何字符串标记化机制来实现此目的 - String.split或StringTokenizer
提示:StringTokenizer执行得更好
答案 2 :(得分: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());
}
}
List list = new 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);
}
答案 3 :(得分:-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());
}