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);