Java将Arraylist拆分为更小的Arraylist
我有一个大小为Java将Arraylist拆分为更小的Arraylist,java,arraylist,Java,Arraylist,我有一个大小为258 现在,我希望将其拆分为三个不同的ArrayList。为此,我创建了以下代码: Integer start = (int) Math.floor((sitesToSearch.size() / 3)); Integer middle = (int) Math.floor((sitesToSearch.size() / 2)); Integer end = (int) Math.floor((sitesToSearch.size() / 1));
258
现在,我希望将其拆分为三个不同的ArrayList。为此,我创建了以下代码:
Integer start = (int) Math.floor((sitesToSearch.size() / 3));
Integer middle = (int) Math.floor((sitesToSearch.size() / 2));
Integer end = (int) Math.floor((sitesToSearch.size() / 1));
ArrayList<String> crawl_list1 = (ArrayList<String>)tmp.subList(0, start);
ArrayList<String> crawl_list2 = (ArrayList<String>)tmp.subList(start+1, middle);
ArrayList<String> crawl_list3 = (ArrayList<String>)tmp.subList(middle+1, end);
那么我怎样才能把它划分成三个更小的数组列表呢
tmp declaration:
public ArrayList<String> getExternalLinks(ArrayList<String> rootDomains){
ArrayList<String> result = new ArrayList<String>();
Document doc = null;
/*
* Check if root is valid
* Find search the site for internal links
*/
for (String root : rootDomains) {
if (!(root == null) || !root.isEmpty() ||!root.contains("#")) {
try {
doc = Jsoup.connect(root)
.userAgent("Mozilla")
.get();
result.addAll(findExternalLinks(findInternalLinks(doc,root),root));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(result.size());
return result;
tmp声明:
公共ArrayList getExternalLinks(ArrayList根域){
ArrayList结果=新建ArrayList();
单据单据=空;
/*
*检查根目录是否有效
*查找并搜索网站的内部链接
*/
for(字符串根:根域){
如果(!(root==null)| |!root.isEmpty()| |!root.contains(“#”){
试一试{
doc=Jsoup.connect(根目录)
.userAgent(“Mozilla”)
.get();
addAll(findExternalLinks(findInternalLinks(doc,root),root));
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
System.out.println(result.size());
返回结果;
}只需使用列表
作为爬网列表的类型1
这只是一般规则的应用
要求subList
的返回值必须是ArrayList
(因为subList
返回原始ArrayList
)的视图,这是没有道理的
如果绝对需要ArrayList
对象,则需要将内容复制到新的ArrayList
对象中:
ArrayList<String> crawl_list1 = new ArrayList<String>(tmp.subList(0, start));
ArrayList<String> crawl_list2 = new ArrayList<String>(tmp.subList(start+1, middle));
ArrayList<String> crawl_list3 = new ArrayList<String>(tmp.subList(middle+1, end));
ArrayList crawl_list1=新的ArrayList(tmp.subList(0,start));
ArrayList crawl_list2=新的ArrayList(tmp.subList(start+1,middle));
ArrayList crawl_list3=新的ArrayList(tmp.子列表(中间+1,结束));
查看ArrayList.subList()
。它不返回数组列表
。它返回一个列表
。没有理由将此列表强制转换为ArrayList。这是一个列表,你只需要知道:
List<String> crawl_list1 = tmp.subList(0, start);
List<String> crawl_list2 = tmp.subList(start+1, middle);
List<String> crawl_list3 = tmp.subList(middle+1, end);
列表爬网\u list1=tmp.子列表(0,开始);
列表爬网\u list2=tmp.子列表(开始+1,中间);
列表爬网\u list3=tmp.子列表(中间+1,结束);
此外,您还应该检查索引,因为传递给子列表的结束索引是独占的。。子列表(fromIndex,toIndex)包含fromIndex,独占toIndex。使用当前代码,中间和开始将永远不会填充ArrayList
以下两个是逻辑的假设:
.子列表(开始,中间)
.subList(中间,结尾+1)如何定义tmp?以及它是如何填充的?您能否显示
tmp
的偏差sitesToSearch
和tmp
之间的关系?可能的重复项我需要将其拆分为三个ArrayList,因为我必须迭代三个ArrayList中的每一个lists@MarcRasmussen:那么?你可以像遍历数组列表一样轻松地遍历列表。我不能对每个列表都这样做,可以吗?是的,你应该尽可能多地对接口进行编码:在方法返回列表的任何地方都使用List
。只有当您需要自己实例化一个新的时,才可以使用ArrayList
。@MarcRasmussen:我刚才不是说过您完全可以这样做吗?你试过了吗?您可以将foreach用于每个Iterable
(其中包括收藏
,其中包括列表
)“toIndex专用”。知道这件事真是太好了。可能应该已经阅读了关于这一点的文档:p
List<String> crawl_list1 = tmp.subList(0, start);
List<String> crawl_list2 = tmp.subList(start+1, middle);
List<String> crawl_list3 = tmp.subList(middle+1, end);