在ArrayList中添加独立值实现点坐标存储的技术咨询
关于ArrayList存储点坐标的代码合理性与优化方案
嘿,咱们来聊聊你这段存储点坐标的代码哈~首先得说,现有代码确实存在一些问题,咱们一步步分析,再给你更合理的实现方案。
现有代码的不合理之处
- 核心逻辑偏离目标:你定义了
L3这个二维ArrayList,但全程没往里面加任何元素;而且每次循环给L1添加两次相同的b,最后得到的是一个扁平的列表,比如当land_no=3时,L1会是[b1,b1,b2,b2,b3,b3],完全没法区分哪个元素属于哪个点,根本达不到“存储独立点坐标”的目的。 - 变量命名不清晰:
L1、L3这种命名太模糊,别人看代码根本猜不到它们的用途,可读性极差。 - 不必要的类型转换:
Math.round()返回的是long类型,你把它赋值给double类型的变量,属于不必要的内存浪费,毕竟取整后已经是整数了。
更优的实现方案
根据你的需求(存储点坐标),我给你推荐两种常用的实现方式,按推荐程度排序:
方案1:自定义Point类(最推荐)
直接定义一个语义明确的Point类来封装坐标,这是Java里处理这类问题最规范的方式:
// 先定义Point类,封装x、y坐标 class Point { private final int x; private final int y; // 构造方法 public Point(int x, int y) { this.x = x; this.y = y; } // 按需添加getter方法,方便获取坐标 public int getX() { return x; } public int getY() { return y; } // 重写toString方法,方便调试时查看点的信息 @Override public String toString() { return "Point{" + "x=" + x + ", y=" + y + '}'; } } // 修改后的landmarks方法 public void landmarks(int land_no) { // 用List存储Point对象,语义清晰 List<Point> pointList = new ArrayList<>(); for (int i = 0; i < land_no; i++) { // 生成x坐标(取整后的随机数) int x = (int) Math.round(Math.random() * 100); // 如果需要x和y相同,就直接用同一个值;如果需要不同,单独生成y即可 int y = x; // int y = (int) Math.round(Math.random() * 100); pointList.add(new Point(x, y)); } }
这种方式的优势:
- 语义清晰:一看就知道
pointList里存储的是一个个点坐标,代码可读性拉满。 - 类型安全:不会出现坐标混乱的情况,避免把x和y搞混。
- 扩展性强:以后如果需要给点添加功能(比如计算两点距离、判断是否在某个区域内),直接在
Point类里加方法就行。
方案2:使用嵌套List(无需自定义类)
如果不想额外定义类,也可以用嵌套的List来存储每个点的坐标,每个子List对应一个点的x和y:
public void landmarks(int land_no) { // 外层List存储所有点,内层List存储单个点的x、y List<List<Integer>> pointList = new ArrayList<>(); for (int i = 0; i < land_no; i++) { int coord = (int) Math.round(Math.random() * 100); List<Integer> singlePoint = new ArrayList<>(); singlePoint.add(coord); singlePoint.add(coord); // x和y相同的情况 // 如果需要x和y不同,分别生成: // int x = (int) Math.round(Math.random() * 100); // int y = (int) Math.round(Math.random() * 100); // singlePoint.add(x); // singlePoint.add(y); pointList.add(singlePoint); } }
这种方式比你原来的扁平List合理,因为每个子List对应一个独立的点,但缺点是没有自定义类直观,需要记住子List的第一个元素是x,第二个是y,容易出错。
内容的提问来源于stack exchange,提问作者user9436026
相关产品推荐
相关产品推荐

