黑马程序员技术交流社区

标题: [提问]自定义数据类型效率优化的问题 [打印本页]

作者: cat73    时间: 2014-8-11 06:50
标题: [提问]自定义数据类型效率优化的问题
本帖最后由 cat73 于 2014-8-11 08:57 编辑

我希望存储一个自定义数据类型, 这个类型非常简单, 有x与y两个属性, 均为int型
然后存储一个列表, 这个列表中有大量的这种数据,而且要经常的查询与增删
这是我现在的写法, 用HashSet存储一堆(数万个)以下这种类:
  1. class Point {
  2.         public final int x;
  3.         public final int y;
  4.         
  5.         public Point(int x, int y){
  6.                 this.x = x;
  7.                 this.y = y;
  8.         }
  9.         
  10.         public int hashCode(){
  11.                 return 0;
  12.         }
  13.         
  14.         public boolean equals(Object obj){
  15.                 if(!(obj instanceof Point)){
  16.                         return false;
  17.                 }
  18.                 Point point = (Point) obj;
  19.                 return point.x == x && point.y == y;
  20.         }
  21. }
复制代码

但是发现实际使用效率极低, 不知道有什么更好的办法捏~
求帮助~~






=============================
改用数组来存储了, 一个boolean形二维数组, 效率高多了, 不过还是很想知道Java里如何去处理这种自定义数据类型合适一些

作者: fantacyleo    时间: 2014-8-11 11:08
这么写hashCode能不慢么?等于把hash的作用废掉了。。。可参考:http://bbs.itheima.com/forum.php ... mp;page=1#pid856308
作者: cat73    时间: 2014-8-11 13:40
本帖最后由 cat73 于 2014-8-11 13:42 编辑
fantacyleo 发表于 2014-8-11 11:08
这么写hashCode能不慢么?等于把hash的作用废掉了。。。可参考:http://bbs.itheima.com/forum.php?mod=vie ...

很无奈的我必须保证元素绝对不能重复才可以
其实我在想真的有必要为这么简单的数据封装成对象么?
有没有什么好办法不需要对象来存储?


作者: fantacyleo    时间: 2014-8-11 13:54
cat73 发表于 2014-8-11 13:40
很无奈的我必须保证元素绝对不能重复才可以
其实我在想真的有必要为这么简单的数据封装成对象么?
有没有什 ...

怎么实现hashCode和你是否需要保证元素不重复没有关系,HashSet本来就是用hashCode和equals联合判定重复元素的,hashCode的实现方式只关乎算法效率。

怎么存储更好,看你的目的。像你说的,二维数组也可以(其实本质上也是hash)。一个long变量的两个32位分别存储int x, y的值也ok。就看你想干啥
作者: cat73    时间: 2014-8-11 15:19
fantacyleo 发表于 2014-8-11 13:54
怎么实现hashCode和你是否需要保证元素不重复没有关系,HashSet本来就是用hashCode和equals联合判定重复 ...

突然想到个思路 hashCode返回x
equals只匹配y..............




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2