java分段加载数据,循环和递归两种方式
package org.jimmy.autosearch2019.test;
import java.util.ArrayList;
public class Test20190328 {
private static final ArrayList<String> allList = new ArrayList<String>();
static {
for(int i = 0; i < 1000; i++) {
allList.add("test000000" + i);
}
}
/**
* @author ラピスラズリ(Dawn)
* @date 2019年3月28日 下午2:16:57
* @detail
*/
public static void main(String[] args) {
System.out.println("循环方式每次获取10个对象:");
ArrayList<String> list = getAllList(0, 10);
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("循环方式每次获取100个对象:");
list = getAllList(0, 100);
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("循环方式每次获取1000个对象:");
list = getAllList(0, 100);
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("递归方式每次获取10个对象:");
list = new ArrayList<String>();
list = getAllList(0, 10, list);
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("递归方式每次获取100个对象:");
list = new ArrayList<String>();
list = getAllList(0, 100, list);
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("递归方式每次获取1000个对象:");
list = new ArrayList<String>();
list = getAllList(0, 1000, list);
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
/**
* @author ラピスラズリ(Dawn)
* @date 2019年3月28日 上午11:07:50
* @detail 分段获取集合数据,pageIndex初始值为0,每次pageSize条,循环方式
*/
public static ArrayList<String> getAllList(int pageIndex, int pageSize) {
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> currentList = new ArrayList<String>();
while((currentList = getStrList(pageIndex, pageSize)).size() != 0){
list.addAll(currentList);
pageIndex++;
}
return list;
}
/**
* @author ラピスラズリ(Dawn)
* @date 2019年3月28日 下午2:24:52
* @detail 递归方式
*/
public static ArrayList<String> getAllList(int pageIndex, int pageSize, ArrayList<String> list) {
ArrayList<String> currentList = getStrList(pageIndex, pageSize);
if(currentList != null && currentList.size() > 0) {
list.addAll(currentList);
pageIndex++;
return getAllList(pageIndex, pageSize, list);
}else {
return list;
}
}
/**
* @author ラピスラズリ(Dawn)
* @date 2019年3月28日 下午2:13:09
* @detail pageIndex初始值为0
*/
public static ArrayList<String> getStrList(int pageIndex, int pageSize) {
ArrayList<String> resultList = new ArrayList<String>();
int beginIndex = pageIndex * pageSize;
int endIndex = (pageIndex + 1) * pageSize - 1;
if(endIndex > allList.size() - 1) {
endIndex = allList.size() - 1;
}
for(int i = beginIndex; i <= endIndex; i++) {
String currentStr = allList.get(i);
resultList.add(currentStr);
}
return resultList;
}
}
好了,效果图就不给了.
java分段加载数据,循环和递归两种方式的更多相关文章
- Java导出数据为EXCEL的两种方式JXL和POI
JXL和POI导出数据方式的比较 POI支持excel2003和2007,而jxl只支持excel2003. 下面为测试代码: public class TestCondition { /** * 生 ...
- C#统计给定的文本中字符出现的次数,使用循环和递归两种方法
前几天看了一个.net程序员面试题目,题目是”统计给定的文本中字符出现的次数,使用循环和递归两种方法“. 下面是我对这个题目的解法: 1.使用循环: /// <summary> /// 使 ...
- python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- 遍历Map集合:java.util.Map.Entry、KeySet两种方式
遍历Map集合的两种方式: 1.用KeySet Map.keySet(),返回一个存放所有key的set集合,通过遍历集合,根据key值取出所有的value值. Map<String,Strin ...
- Java并发--线程间协作的两种方式:wait、notify、notifyAll和Condition
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界 ...
- Android提交数据到服务器的两种方式四种方法
本帖最后由 yanghe123 于 2012-6-7 09:58 编辑 Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方 ...
- python利用mongodb上传图片数据 : GridFS 与 bson两种方式
利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊.性能方面的优劣未曾测试,无法进行评价 ...
- mysql导出数据到excel的两种方式
使用第一种方式如果数据中有换行符的话会自动换行,但使用第二种方式就不会出现这种效果了.两种方式自己选择哈 1:select * from into outfile 'c:/Users/a.xls' t ...
- 1.java多线程_实现线程的两种方式
1.java多线程基本知识 1.1.进程介绍 不管是我们开发的应用程序,还是我们运行的其他的应用程序,都需要先把程序安装在本地的硬盘上.然后找到这个程序的启动文件, 启动程序的时候,其实是电脑把当前的 ...
随机推荐
- 仿照 QQ 的 cell 的左滑删除、置顶、标记未读效果
侧滑删除.置顶.取消关注,在iOS8之前需要我们自定义,iOS8时苹果公司推出了新的API,UITableViewRowAction类,我们可以使用该类方便的制作出如下图的效果. 下面是实现的主要代码 ...
- hdoj5402 【模拟/构造】
题意: 给你一个矩阵,每个值都是非负,然后让你从左上角走到右下角,每个点只能走一次,求到终点的最大值,还要输出一条路径 思路: 一开始拿到还以为搜索之类的,但是发现神特么暴力+麻烦(因为路径这个东西. ...
- hdoj5003【wa水】
蜜汁wa,蜜汁wa,少了个\n------ #include<bits/stdc++.h> using namespace std; typedef long long LL; typed ...
- 洛谷P3825 [NOI2017]游戏(2-SAT)
传送门 果然图论的题永远建图最麻烦……看着题解代码的建图过程真的很珂怕…… 先不考虑地图$x$,那么每一个地图都只能用两种赛车,于是我们可以用2-SAT来搞,用$i$表示这个地图能用的第一辆车,$i' ...
- MySQL 错误码对照
1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目 ...
- Django models数据库配置以及多数据库调用设置
今天来说说web框架Django怎么配置使用数据库,也就是传说中MVC(Model View Controller)中的M,Model(模型). 简单介绍一下Django中的MVC: 模型(model ...
- Codeforces Round #544 (Div. 3) A.Middle of the Contest
链接:https://codeforces.com/contest/1133/problem/A 题意: 给两个时间点,求中间时间点. 思路: 数学 代码: #include <bits/std ...
- tsconfig.json No inputs were found in config file
Build:No inputs were found in config file '/tsconfig.json'. Specified 'include' paths were '["* ...
- rac 添加 资源
10g : 自动化.监控.os,存储,底成,网络,规范
- [已读]JavaScript面向对象编程指南
又是一个忽悠人的书名,其实这本书的花了大量内容阐述JS的基础语法,BOM,DOM,事件,ajax(这个和很多js书一样).最后一章则是编程模式与设计模式. 我觉得与面向对象没多大关系,要算的话,pro ...