我有一个ArrayList [] myList,我正在尝试创建一个列表,列出数组中值的所有排列.
示例:(所有值均为字符串)
myList[0] = { "1", "5", "3", "9" };
myList[1] = { "2", "3" };
myList[2] = { "93" };
Run Code Online (Sandbox Code Playgroud)
myList的计数可以变化,因此事先不知道它的长度.
我希望能够生成一个类似于以下所有排列的列表(但有一些额外的格式).
1 2 93
1 3 93
5 2 93
5 3 93
3 2 93
3 3 93
9 2 93
9 3 93
Run Code Online (Sandbox Code Playgroud)
这是否理解我想要完成的事情?我似乎无法想出这样做的好方法,(如果有的话).
编辑:
我不确定递归是否会干扰我以自己的方式格式化输出的愿望.对不起我之前没有提到我的格式.
我想最终构建一个string []数组,其中包含如下格式的所有组合:
对于"1 2 93"排列
我希望输出为"val0 = 1; val1 = 2; val2 = 93;"
我现在将尝试递归.谢谢Dr.Jokepu
我想检查branchList是否有相同的元素,如果相同,将branchList和tglList元素分开arraylist并将该arraylist放入另一个arraylist,
我想要的结果是BranchList1有2个arraylist,其中第一个arraylist包含元素'1',第二个arraylist包含元素'2',TglList1有2个arraylist作为元素,但我得到的是第1和第2个数组得到相同的值.
如何才能做到这一点?
ArrayList branchList = new ArrayList();
branchList.add("1");
branchList.add("1");
branchList.add("1");
branchList.add("2");
branchList.add("2");
branchList.add("2");
ArrayList tglList = new ArrayList();
tglList.add("5");
tglList.add("10");
tglList.add("20");
tglList.add("100");
tglList.add("500");
tglList.add("1000");
ArrayList newBranchList = new ArrayList();
ArrayList newTglList = new ArrayList();
ArrayList BranchList1 = new ArrayList();
ArrayList TglList1 = new ArrayList();
ArrayList abc = new ArrayList();
String checkBranch = new String();
for(int i=0;i<branchList.size();i++){
String branch = branchList.get(i).toString();
if(i==0 || checkBranch.equals(branch)){
newBranchList.add(branch);
newTglList.add(tglList.get(i).toString());
}else{
BranchList1.add(newBranchList);
TglList1.add(newTglList);
newBranchList.clear();
newTglList.clear();
newBranchList.add(branch);
newTglList.add(tglList.get(i).toString());
}
if(i==(branchList.size()-1)){
BranchList1.add(newBranchList);
TglList1.add(newTglList);
}
checkBranch = …Run Code Online (Sandbox Code Playgroud) 该toArray方法(可以接在执行java.util.ArrayList)如下:
class ArrayList<E> ....{
public <T> T[] toArray(T[] a){
if(a.length < size)
return (T[]) Arrays.copyof(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if(a.length > size)
a[size] = null;
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道我们可以使用<E>而不是<T>在这种情况下吗?喜欢
public E[] toArray(E[] a){
if(a.length < size)
return (E[]) Arrays.copyof(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if(a.length > size)
a[size] = null;
return a;
}
Run Code Online (Sandbox Code Playgroud)
由于ArrayList类iteself已经是通用的<E>,所以我们可以使用它而不是新的泛型类型<T>吗?
首先,如果我错了,请纠正我.我想在ArrayList<CustomType>不使用For循环的情况下找到Item的索引(即字符串值).
POJO:
id;
name;
Run Code Online (Sandbox Code Playgroud)
码:
ArrayList<POJO> list = new ArrayList<POJO>;
//Lots of data added to these list...
Run Code Online (Sandbox Code Playgroud)
现在我想从arraylist中找到特定名称的id而不使用下面的for循环.
String id = null;
// TODO Auto-generated method stub
for (int i = 0; i < list.size(); i++) {
if("ABCD".equalsIgnoreCase(list.get(i).getName())) {
id = list.get(i).getId();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我不想实现For循环,因为在某些情况下,我在List中有500多个数据,并且使用For循环查找索引不是一个好方法.
我有以下代码ThisClass:
static ArrayList<MyClass> classlist;
Run Code Online (Sandbox Code Playgroud)
如果我打电话:
ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);
Run Code Online (Sandbox Code Playgroud)
然后再次调用此行:
ThisClass.classlist = new ArrayList<MyClass>();
Run Code Online (Sandbox Code Playgroud)
它会重置ThisClass.classlist列表,即类列表列表将不再包含对象吗?
我有ArrayList zombie,其中填充了一个名为的对象Zombie.Zombie有属性health,x,y.我怎么会在升序排列,使用属性对数组进行排序x的Zombie,最初具有随机值被设置?
我正在使用JDiagram JAR,如下所示
Diagram myDigram = new Diagram();
myDigram.routeAllLinks();
Run Code Online (Sandbox Code Playgroud)
使用JRE 7运行时此代码可以正常工作,但是当它与JRE 8一起运行时,会抛出以下错误:
java.lang.StackOverflowError
at java.util.Collections.sort(Unknown Source)
at com.mindfusion.common.ExtendedArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at com.mindfusion.common.ExtendedArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at com.mindfusion.common.ExtendedArrayList.sort(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我跟着堆栈跟踪到JDiagram反编译代码.观察到routeAllLinks()在另一个对象(比如路由器)上调用RouteLinks(),并且在另一个级别深度调用错误堆栈跟踪中出现的ExtendedArrayList.sort().JDiagram中的"ExtendedArrayList"扩展了ArrayList,并包含一个名为"sort()"的方法,该方法具有以下定义.
public void sort(Comparator<? super T> paramComparator)
{
Collections.sort(this, paramComparator);
}
Run Code Online (Sandbox Code Playgroud)
在Google上,我发现JRE 8引入了List.sort()并将Collections.sort()调用委托给集合(在我的情况下为ExtendedArrayList)排序方法.因此,库ExtendedArrayList.sort()成为了一个覆盖.它会创建一个无限递归,从而导致stackoverflow.我现在可以用一小段代码重现这个问题.
也
我们尝试过以下目前无效的解决方案
如果有任何要点需要详细说明,请告诉我.欢迎任何帮助.谢谢.
更新 到目前为止,javassist是最好的方法,但JDiagram混淆是阻止解决方案正常工作.我们有点认为考虑到我们的发布日期是不可能的(不得不说).我们已经开始升级库的过程.同时从我们的应用程序中删除了一个由routeAllLinks()方法提供的小功能.. :-(感谢大家的帮助.我将继续研究这个问题,因为我发现它真的很有趣和挑战..我如果我能解决它,我会更新帖子.而且我将继续为@gontard提供他的javassist方法,因为我正在继续我的研究.谢谢.
List<List<String>> superlist = new ArrayList<List<String>>();
List<String> list1 = new ArrayList<String>();
list1.add("a1");
list1.add("a2");
List<String> list2 = new ArrayList<String>();
list2.add("b1");
list2.add("b2");
List<String> list3= new ArrayList<String>();
list3.add("c1");
list3.add("c2");
superlist.add(list1);
superlist.add(list2);
superlist.add(list3);
List<String> result= new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个包含所有值的新列表superList.这里的结果应该包含a1,a2,b1,b2,c1,c2
我收到警告:
未经检查的'java.util.ArrayList'赋值给'java.util.ArrayList <com.test.mytest>'
对于:
private ArrayList<LocoList> myLocations = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
怎么解决?
我正在尝试从大小为7,140,000的ArrayList中删除140,000个对象.我预计这将需要几秒钟(如果那样),而是Java每千个对象需要几秒钟.这是我的代码:
for (int i = list.size(); i > P; i--)
{
int size = list.size();
int index = (int) (Math.random() * size);
list.remove(index);
}
Run Code Online (Sandbox Code Playgroud)
注意:P是我之前设置为7,000,000的常量.
循环的目标是从列表中随机删除对象,直到其大小为7,000,000.
Java花了这么长时间,因为我开始使用超过700万个对象?我从未注意到过去从ArrayLists中删除这个效率问题.如果有帮助,我使用DrJava Beta IDE.
arraylist ×10
java ×9
android ×2
arrays ×1
c# ×1
collections ×1
generics ×1
indexof ×1
java-8 ×1
object ×1
performance ×1
permutation ×1
search ×1
sorting ×1
warnings ×1