排序和合并arraylist

时间:2015-09-20 14:06:39

标签: java android google-maps arraylist

我有一个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));
        }

    }
}

我添加了一些日志来检查时间,导入和处理文件需要0.5秒。其余的需要1分钟。

优化这种方法的方法是什么?我的想法是,是否可以采取所有重复的点(相同的纬度和经度)并使用最常见的hr值或平均值(?)。如果用户在移动中,我不知道这会有多大帮助。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

这些简单的事情浮现在脑海中。

  1. 通过执行以下操作,初始化具有初始容量的ArrayLists以减少其调整大小(这有点沉重的任务)。我不知道readFile()的代码,所以自己这样做。

    ArrayList<String> lat = new ArrayList<String>(6000);

  2. 请勿将lat.size()置于for状态。

    for (int i = 0; i < lat.size(); i++) {

  3. 为什么维持3 List?我不知道具体的要求,但如果我的假设是正确的,你可以做ArrayList<MyCustomObjectWhichHoldsTheThreeValuesInOneClass>

  4. 之类的事情。

答案 1 :(得分:1)

测试数据:

  

1:1,1:2,3:4,2:3,5:5

如果没有您的域名,该怎么办不太清楚。 这种情况的标准解决方案是大型多标记。 Etc =&gt;

  

1:1.5,2.5:3.5,5:5

此外,我没有看到您限制可见区域。我必须向你展示一切吗?如果只看到0:0到2:2,则只需要显示:

  

1:1,1:2