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

时间:2011-04-24 10:09:53

标签: java ruby arrays data-structures

我是一名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实践是什么?

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

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

我知道互联网上有大量的Java资源,但我想知道有这种问题的人的意见。

2 个答案:

答案 0 :(得分:2)

有完整的书籍专门讨论你的问题(数据结构),但我会尽量保持简单。有许多选项,如堆排序,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

答案 1 :(得分:2)

这取决于您的表现需求。 为了您的使用,您可以使用SortedSet实施TreeSet,并为您的Point类(或现有的Comparator类)编写Point2D根据元素x值。这将允许您在O(log(n))中插入和检索元素。

请注意,如果您进行大量插入操作,则不应使用Array,因为Array中间的n个插入费用为n^2。但是,如果您遍历数据的次数远远超过更新数据,那么Array就可以了。