Java 在ArrayList中查找整数对的数目
最近遇到黑客挑战,在给定数组中找到int对。 使用ArrayList作为一种方法。 有人能纠正这段代码中的错误吗 错误:线程“main”java.lang.IndexOutOfBoundsException中出现异常:索引:10,大小:9 位于java.util.ArrayList.rangeCheck(ArrayList.java:653) 在java.util.ArrayList.remove处(ArrayList.java:492) 位于Solution.main(Solution.java:32) 这将检索位置i处的值Java 在ArrayList中查找整数对的数目,java,arraylist,Java,Arraylist,最近遇到黑客挑战,在给定数组中找到int对。 使用ArrayList作为一种方法。 有人能纠正这段代码中的错误吗 错误:线程“main”java.lang.IndexOutOfBoundsException中出现异常:索引:10,大小:9 位于java.util.ArrayList.rangeCheck(ArrayList.java:653) 在java.util.ArrayList.remove处(ArrayList.java:492) 位于Solution.main(Solution.jav
ch.remove(a);
这将删除存储在索引a
中的值。值a
可能大于ArrayList大小
这就是你错的地方。试着注释一下,如果有人需要不同的方法来查找arraylist中的总对数,那么它可能会起作用。
//if some one needs a different approach to find total number of pairs in a arraylist.
int pair=0;
List<Integer> list = new ArrayList<Integer>();//your input
Set<Integer> uniqueSet = new HashSet<Integer>(list);
for (Integer temp : uniqueSet) {
System.out.println(temp + ": " + Collections.frequency(list, temp));
if(Collections.frequency(list, temp)==2|| Collections.frequency(list, temp)>2)
{
int t=Collections.frequency(list, temp)/2;
pair=pair+t;
}
}
return pair;
int对=0;
列表=新的ArrayList()//你的意见
Set uniqueSet=新哈希集(列表);
用于(整数温度:唯一设定){
System.out.println(temp+“:”+Collections.frequency(list,temp));
if(Collections.frequency(list,temp)==2 | | Collections.frequency(list,temp)>2)
{
int t=集合频率(列表、临时)/2;
配对=配对+t;
}
}
返回对;
如果
a=ch.get(i)
,什么会阻止b
等于i
?错误将发生在此行ch.remove(a)代码>就像在程序中一样a
可以是一个大于Arraylist
大小的数字。任何其他替代方法都可以从数组中删除元素,以免妨碍搜索。另外,我正在删除元素,这样它们就不会以另一个递归对的方式出现。我使用的方法是,如果我们有一对元素,我们将删除该对,以再次开始查找和删除的过程。这样,就消除了寻找递归对的可能性。
int a = ch.get(i);
ch.remove(a);
//if some one needs a different approach to find total number of pairs in a arraylist.
int pair=0;
List<Integer> list = new ArrayList<Integer>();//your input
Set<Integer> uniqueSet = new HashSet<Integer>(list);
for (Integer temp : uniqueSet) {
System.out.println(temp + ": " + Collections.frequency(list, temp));
if(Collections.frequency(list, temp)==2|| Collections.frequency(list, temp)>2)
{
int t=Collections.frequency(list, temp)/2;
pair=pair+t;
}
}
return pair;