[英]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
这取决于您的性能需求。 供您使用,您可以使用SortedSet
实现(例如TreeSet),并为Point类(或现有的Point2D之类 )编写一个Comparator ,该Comparator根据元素x值进行排序。 这将使您可以插入和检索O(log(n))
元素。
请注意,如果您进行大量插入操作,则不应使用Array
,因为在Array
中间插入n次插入会产生n^2
开销。 但是,如果遍历数据比更新数据多得多,则Array
很有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.