A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cat73 黑马帝   /  2014-8-11 06:50  /  1208 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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里如何去处理这种自定义数据类型合适一些

5 个回复

倒序浏览
这么写hashCode能不慢么?等于把hash的作用废掉了。。。可参考:http://bbs.itheima.com/forum.php ... mp;page=1#pid856308
回复 使用道具 举报
cat73 黑马帝 2014-8-11 13:40:54
藤椅
本帖最后由 cat73 于 2014-8-11 13:42 编辑
fantacyleo 发表于 2014-8-11 11:08
这么写hashCode能不慢么?等于把hash的作用废掉了。。。可参考:http://bbs.itheima.com/forum.php?mod=vie ...

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

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

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

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

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

点评

嗯,这当然没问题  发表于 2014-8-11 15:38
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马