繁体   English   中英

用于处理2D点,数组,列表或其他内容的Java数据结构?

[英]Java data structure for handling 2D points, array, list or other?

我是Ruby开发人员,由于有了Android平台,我将给Java一个机会。

我有一组2D点[p1,p2,p3,p4 ... p10],我想对这些点重新排序,按点的x值升序排列。 在Ruby中,我将执行以下操作:

points.sort! {|a,b| a.x <=> b.x}

我希望能够在Ruby中的现有点之间插入新的设置点:

points.insert(3, point)

实现此目的的最佳Java做法是什么?

应该将点存储在数组中,以及我设计的排序和插入机制吗?

还是已经存在用于此目的的结构? (其中一个,用于简化在现有元素之间插入另一个元素,并按其属性对元素进行排序)

我知道Internet上有很多Java资源,但是我想了解那些有实践经验的人的意见。

整本书都专门讨论您的问题(数据结构),但是我会尽量简化。 有很多选项,例如堆排序,qucksort,合并排序,二叉树等。但是我不建议学习这些方法,而是建议使用简单的内置功能。

Arrays.sort(pa) ; 使用其自然顺序将基本类型数组元素按升序排序。

Arrays.sort(pa,from,to); 对基本类型的元素pa [from] ... pa [to-1]进行排序。 升序。

Arrays.sort(OA); 使用Comparable接口定义的顺序将对象类型的数组的元素按升序排序,该接口定义了compareTo方法。 请注意,许多Java类(例如String(但不是StringBuffer),Double,BigInteger等)实现Comparable。

Arrays.sort(oa,from,to); 按对象类型从...到范围的升序对数组中的元素进行排序。

Arrays.sort(oa,comp) ; 使用Comparator comp将对象类型的数组的元素按升序排序。

Arrays.sort(oa,from,to,comp); 使用Comparator comp将对象类型从...到范围的数组元素按升序排序。

import java.util.Arrays;

public class Dblsrt {
    //========================================================= main
    public static void main(String[] args) {
        //... 1. Sort strings - or any other Comparable objects.
        String[] names = {"Zoe", "Alison", "David"};
        Arrays.sort(names);
        System.out.println(Arrays.toString(names));

        //... 2. Sort doubles or other primitives.
        double[] lengths = {120.0, 0.5, 0.0, 999.0, 77.3};
        Arrays.sort(lengths);
        System.out.println(Arrays.toString(lengths));
    }
}

输出:

[Alison, David, Zoe]
[0.0, 0.5, 77.3, 120.0, 999.0]

赞扬http://www.leepoint.net/notes-java/data/arrays/70sorting.html

有关更详细的信息, 请访问http://www.theparticle.com/javadata2.html

这取决于您的性能需求。 供您使用,您可以使用SortedSet实现(例如TreeSet),并为Point类(或现有的Point2D之类 )编写一个Comparator ,该Comparator根据元素x值进行排序。 这将使您可以插入和检索O(log(n))元素。

请注意,如果您进行大量插入操作,则不应使用Array ,因为在Array中间插入n次插入会产生n^2开销。 但是,如果遍历数据比更新数据多得多,则Array很有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM