Java 排序和合并arraylist
我有一个名为坐标的ArrayList>,它有3个列表:一个包含一个名为hr的变量,一个包含纬度,一个包含经度。在每一本书中都有成千上万的条目。我的想法是在地图(lol)中映射所有这些变量,其中一个颜色点(取决于hr)被放置在纬度和逻辑度指定的位置。我现在就是这样做的。我有一个谷歌地图的标准活动。在onCreate的末尾,我调用:Java 排序和合并arraylist,java,android,google-maps,arraylist,Java,Android,Google Maps,Arraylist,我有一个名为坐标的ArrayList>,它有3个列表:一个包含一个名为hr的变量,一个包含纬度,一个包含经度。在每一本书中都有成千上万的条目。我的想法是在地图(lol)中映射所有这些变量,其中一个颜色点(取决于hr)被放置在纬度和逻辑度指定的位置。我现在就是这样做的。我有一个谷歌地图的标准活动。在onCreate的末尾,我调用: paint() 此函数的作用是: /*Paint the dots of locations*/ private void paint (){ //Pain
paint()
此函数的作用是:
/*Paint the dots of locations*/
private void paint (){
//Paint the city with the blood of my enemies
ArrayList<ArrayList<String>> coordinates = new ArrayList<ArrayList<String>>();
ArrayList<String> lat = new ArrayList<String>();
ArrayList<String> lon = new ArrayList<String>();
ArrayList<String> hr = new ArrayList<String>();
coordinates = readfile(); #Import file from downloads and process it, takes 0.5sec for over 6000 entries.
/*Here and down takes 1 minute for the same number of entries*/
lat = coordinates.get(0);
lon = coordinates.get(1);
hr = coordinates.get(2);
for (int i = 0; i < lat.size(); i++) {
//paint
// Add a circle for high heart rate
if(Integer.parseInt(hr.get(i))>100){
Circle circle = mMap.addCircle(new CircleOptions()
.center(new LatLng(Double.parseDouble(lat.get(i)), Double.parseDouble(lon.get(i))))
.radius(10) //size of circle
.strokeColor(Color.RED)
.fillColor(Color.RED));
}
else{
Circle circle = mMap.addCircle(new CircleOptions()
.center(new LatLng(Double.parseDouble(lat.get(i)), Double.parseDouble(lon.get(i))))
.radius(10) //size of circle
.strokeColor(Color.GREEN)
.fillColor(Color.GREEN));
}
}
}
/*绘制位置的点*/
私人空间涂料(){
//用我敌人的鲜血粉刷这座城市
ArrayList坐标=新的ArrayList();
ArrayList lat=新的ArrayList();
ArrayList lon=新的ArrayList();
ArrayList hr=新的ArrayList();
coordinates=readfile();#从下载中导入文件并进行处理,超过6000个条目需要0.5秒。
/*对于相同数量的条目,此处和下方需要1分钟*/
lat=坐标。获取(0);
lon=坐标。获取(1);
hr=坐标。获取(2);
对于(int i=0;i100){
圆圈=mMap.addCircle(新圆圈选项()
.center(新LatLng(Double.parseDouble(lat.get(i)),Double.parseDouble(lon.get(i)))
.半径(10)//圆的大小
.strokeColor(颜色.红色)
.fillColor(Color.RED));
}
否则{
圆圈=mMap.addCircle(新圆圈选项()
.center(新LatLng(Double.parseDouble(lat.get(i)),Double.parseDouble(lon.get(i)))
.半径(10)//圆的大小
.strokeColor(颜色.绿色)
.fillColor(Color.GREEN));
}
}
}
我添加了一些日志来检查时间,导入和处理文件需要0.5秒。剩下的需要1分钟
优化这一点的方法是什么?我的想法是,如果可以把所有重复的点(相同的纬度和经度)都取下来,然后使用最常见的hr值或平均值(?)。如果用户在移动,我不知道这会有多大帮助
有什么建议吗?我想到了这些简单的事情
ArrayLists
,通过执行以下操作来减小其大小(这是一项有点繁重的任务)。我不知道readFile()
的代码,所以你自己做吧
ArrayList lat=新的ArrayList(6000)代码>
lat.size()
置于for
状态
for(inti=0;i
List
?我不知道具体的要求,但如果我的假设是正确的,您可以执行类似于ArrayList
我想到了这些简单的事情
ArrayLists
,使用初始容量通过执行以下操作来减小其大小(这是一项繁重的任务)。我不知道readFile()
的代码,所以请自己动手
ArrayList lat=新的ArrayList(6000);
lat.size()
置于for
状态
for(inti=0;i
List
?我不知道具体的要求,但如果我的假设是正确的,您可以执行类似于ArrayList
测试数据: 1:1,1:2,3:4,2:3,5:5 不太清楚没有你的域名怎么办。 这种情况的标准解决方案是在一个大的标记中使用综合多个标记。 等=> 1:1.5,2.5:3.5,5:5 此外,我看不到您限制了可见性区域。我必须向您展示所有内容吗?如果您仅看到0:0到2:2,则您需要仅显示以下内容: 1:1,1:2
测试数据: 1:1,1:2,3:4,2:3,5:5 不太清楚没有你的域名怎么办。 这种情况的标准解决方案是在一个大的标记中使用综合多个标记。 等=> 1:1.5,2.5:3.5,5:5 此外,我看不到您限制了可见性区域。我必须向您展示所有内容吗?如果您仅看到0:0到2:2,则您需要仅显示以下内容: 1:1,1:2