为什么我会重复?

来源:6-5 应用 Collections.sort() 实现 List 排序

evil啊啊啊

2015-08-10 16:18

package com.project;


import java.util.List;

import java.util.Random;

import java.util.ArrayList;

import java.util.Collections;



public class Imath {



Integer k;

public void testSort(){

List<String> stringlist=new ArrayList<String>();

Random random=new Random();

for(int i=0;i<10;i++){

do{

k=random.nextInt(10);

}while(stringlist.contains(k));

String b=String.valueOf(k);

stringlist.add(b);

}

System.out.println("~~~~~~~~~~排序前~~~~~~~");

for(String str:stringlist){

System.out.println("元素:"+str);

}

Collections.sort(stringlist);

System.out.println("~~~~~~~~~~排序后~~~~~~~");

for(String str:stringlist){

System.out.println("元素:"+str);

}

}


public static void main(String[] args) {


Imath math=new Imath();

math.testSort();

}


}


写回答 关注

2回答

  • 管理員
    2015-08-11 08:42:00
    已采纳

    判断重复可以换成 stringlist.contains(k+"");

    contains比较的是equals的返回值

    List<String> list = new ArrayList<String>();
    list.add("1");
    System.out.println(list.contains("1"));//true
    System.out.println(list.contains(1));//false

    这个你未必能理解,但是简单说一下,有可能越解释越糊涂

    比如list.contains(1)
    contains方法会把 1变成new Integer(1);//对象型

    Integer i = new Integer(1);

    然后判断对象的equals,

    i.equas("1");//false

    evil啊啊...

    非常感谢!

    2015-09-11 13:02:15

    共 3 条回复 >

  • 管理員
    2015-08-13 08:29:26

    while(stringlist.contains(k+"")); // while(stringlist.contains(k)); 这行有问题

    要是直接把错误点出来就太没意思了

    森特 回复evil啊啊...

    因为k是个int类型的数,加了+""之后就转变成String类型了

    2016-04-19 13:57:04

    共 5 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题