【问题标题】:Sort and merge arraylist排序和合并数组列表
【发布时间】:2015-12-17 06:29:50
【问题描述】:

我有一个名为坐标的 ArrayList>,它有 3 个列表:一个带有名为 hr 的变量,一个带有纬度,一个带有经度。在每一个中都有数千个条目。我的想法是将所有这些变量映射到地图(大声笑)中,其中一个颜色的点(取决于 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 值或平均值(?)。我不知道如果用户在移动中这会有多大帮助。

有什么建议吗?

【问题讨论】:

    标签: java android google-maps arraylist


    【解决方案1】:

    想到这些简单的事情。

    1. 使用初始容量初始化您的ArrayLists,以通过执行以下操作来减小其调整大小(这有些繁重的任务)。我不知道readFile() 的代码,所以自己做吧。

      ArrayList&lt;String&gt; lat = new ArrayList&lt;String&gt;(6000);

    2. 不要将lat.size() 放在for 条件中。

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

    3. 为什么要维护 3 个List?我不知道具体要求,但如果我的假设是正确的,你可以做类似ArrayList&lt;MyCustomObjectWhichHoldsTheThreeValuesInOneClass&gt;

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 2014-12-02
        • 1970-01-01
        • 2014-08-08
        • 2021-08-04
        • 2013-01-06
        相关资源
        最近更新 更多