2 oiu1010110 oiu1010110 于 2016.04.19 21:40 提问

Java 集合为什么只能加一个数进去 就在while里面出不来呢?
List<Rational>rationalList = new ArrayList<>();
    Random random = new Random();
    Rational rational = new Rational();
    //产生原分数集合
    for(int i = 0;i < 10;i++){
        do{
            rational.denominator = random.nextInt(Integer.MAX_VALUE);
            rational.numerator = random.nextInt(Integer.MAX_VALUE);
        }while(rationalList.contains(rational));

        rationalList.add(rational);
    }

2个回答

oiu1010110
oiu1010110   2016.04.23 19:11
已采纳

ListrationalList = new ArrayList<>();
Random random = new Random();
Rational rational;
//产生分数集合
for(int i = 0;i < 10;i++){
do{

int dm = random.nextInt();
int nm = random.nextInt();
rational = new Rational(nm,dm);

        }while(rationalList.contains(rational)); 

        rationalList.add(rational);

    }
    //已解决
caozhy
caozhy   Ds   Rxr 2016.04.20 00:20

rationalList.contains(rational)
这里比较的是引用。
你需要重写Rational的hashCode和equals,使得相同的分数返回true

oiu1010110
oiu1010110 我直接用生成的hashCode和equals方法,但是我调式的发现的问题是它每次遇到的是equals方法里的第一句if (this == obj) return true;就返回truel,然后就出不来
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java集合框架之迭代器(if与while语句)
一Iterator接口   迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层 结构。迭代器通常被称为"轻量级"对象,因为创建它的代价小。       Java中的迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。可以知道的是,它只是提供了一个 接口,并没有提供真正的Iterator类。Iterator是
java 几个集合(每个集合取一个数) 进行排序
多个集合,每个集合取一个值进行排序。
下面程序为什么没有一直陷入main的while(1)循环?(多线程在作怪)
很久以前,接触一个项目,看到一个while(1)死循环,但又发现程序经常跳出while去执行另外一段程序,甚为疑虑。其实,在多线程模式下,这是可能的,下面的程序就不会一直陷入main的while(1)循环: #include #include DWORD WINAPI ThreadFun(LPVOID pM) { while(1) { printf("thread\n
Java集合不能存放基本数据类型,只存放对象的引用
Java集合不能存放基本数据类型Java集合如Map、Set、List等所有集合只能存放引用类型数据,它们都是存放引用类型数据的容器,不能存放如int、long、float、double等基础类型的数据。1. 集合存储对象Java集合中实际存放的只是对象的引用,每个集合元素都是一个引用变量,实际内容都放在堆内存或者方法区里面,但是基本数据类型是在栈内存上分配空间的,栈上的数据随时就会被收回的。2.
Java synchronized 中的while 和 notifyAll
问题1大多数人都知道常见的使用synchronized代码:synchronized (obj) { while (check pass) { wait(); } // do your business }那么问题是为啥这里是while而不是if呢? 这个问题 我最开始也想了很久, 按理来说 已经在synchronized块里面了嘛 就不需要了. 这个
while条件判断
#include using namespace std; int main() { int value,sum=0; while(cin>>value) sum+=value; return 0; } 判断条件是cin>>value  它具有从标准输入读取下一个数并且将读入的值保存在value中的效果。输入操作符返回其左操作数。 while条件测试输入操作符的返回结果。意味
多线程通过final访问主线程局部变量
文章标题看起来是一个错误命题,因为在java的内存模型中方法的局部变量是放在线程私有的栈里的。下图是java虚拟机的内存模型:   那么如何访问呢?这当然是有前提的,首先必须是内部类,局部变量必须加final修饰符。看代码示例: Java代码   public class FinalTest {       public static void mai
集合只能存在引用类型数据
java集合如Map、Set、List等所有集合只能存放引用类型数据,它们都是存放引用类型数据的容器,不能存放如int、long、float、double等基础类型的数据。1. 集合存储对象Java集合中实际存放的只是对象的引用,每个集合元素都是一个引用变量,实际内容都放在堆内存或者方法区里面,但是基本数据类型是在栈内存上分配空间的,栈上的数据随时就会被收回的。2. 基本类型数据如何解决呢?可以通...
JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。
首先,集合的存在就是为了方便对多个对象的操作才出现的,集合是存储对象最常用的一种方式,也就是说,集合的从有到无都是因为对象,人们发现要保存多个对象很麻烦,于是便发明了集合,集合是依赖对象而生的,所以就对基本数据类型"不感兴趣",但是,现在基本数据类型都有了其对应的封装的对象,而且有了自动拆箱和装箱功能,基本数据类型和其对应对象之间的转换变得很方便,想把基本数据类型存入集合中,直接存就可以了,系统会
集合中存入对象问题
前言    今天逛了下论坛,发现有一种说法,集合不能存储基本类型,都是存储对象,我自己实验了下,List&amp;lt;int&amp;gt;报错了,而List&amp;lt;Integer&amp;gt;则通过了编译。行吧,暂且认同这种说法。    本篇主要是说明集合中存入对象的问题。对象存入集合都是以内存地址的形式存入,当存入之后,修改了对象的值,就算没有直接操作对象,那么对象里的值也会改变。案例1List中存入Map集合对...