Java 排序和合并arraylist

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

我有一个名为坐标的ArrayList>,它有3个列表:一个包含一个名为hr的变量,一个包含纬度,一个包含经度。在每一本书中都有成千上万的条目。我的想法是在地图(lol)中映射所有这些变量,其中一个颜色点(取决于hr)被放置在纬度和逻辑度指定的位置。我现在就是这样做的。我有一个谷歌地图的标准活动。在onCreate的末尾,我调用:

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

  • 为什么要维护3
    List
    ?我不知道具体的要求,但如果我的假设是正确的,您可以执行类似于
    ArrayList


  • 我想到了这些简单的事情

  • 初始化
    ArrayLists
    ,使用初始容量通过执行以下操作来减小其大小(这是一项繁重的任务)。我不知道
    readFile()
    的代码,所以请自己动手

    ArrayList lat=新的ArrayList(6000);

  • 不要将
    lat.size()
    置于
    for
    状态

    for(inti=0;i

  • 为什么要维护3
    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