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

package Collection;
import java.util.*;
/**
* 练习;按照字符串长度排序
*  字符串本身具备比较性,但是他的比较方式不是所需要的
* 这是需要比较器
* @author Administrator
*ts.add("a");
*/
public class TreeSetTest {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  TreeSet ts = new TreeSet(new Mycompare2());
  ts.add("abcd");
  ts.add("ab");
  ts.add("abcdef");
  ts.add("a");
  ts.add("a");
  Iterator it= ts.iterator();
  while(it.hasNext())
  {
   
   System.out.println(it.next());
  }
  
}
}
class Mycompare2 implements Comparator
{
public int compare(Object o1,Object o2)
{
  String s1=(String)o1;
  String s2=(String)o2;
  if(s1.length()>s2.length())
   return 1;
  if(s1.length()==s2.length())//这里视频中讲的是建立一个num接收比较返回的值,再通过comparaTo方法比较两个字符串的内容进行排序
//理由是当比较结果是0时,会出现错误,我这么写,测试的结果是不会出现重复元素,是不是当此compara方法返回结果是0时,集合会自动转到第一种比较方式呢???求解
  return 0;
  return -1;
}
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
public int compare(Object o1,Object o2)
{
  String s1=(String)o1;
  String s2=(String)o2;
  if(s1.length()>s2.length())
   return 1;
  if(s1.length()==s2.length())//这是比较顺序的。。不是判断重复元素的。判断重复元素是equals方法。
  return 0;
  return -1;
}
}

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
李厚斌 发表于 2014-4-6 21:07
public int compare(Object o1,Object o2)
{
  String s1=(String)o1;

当然知道判断相同的方法!但是这里排序是先调用自己重写的compare方法,这里用字符串的长度判断,问题在于,当这里会出现返回值为0的情况,此方法不能给出下一步排序方法,视频里,进行了下一步判断,用一个num接收返回值,如果num==0时,直接在compare调用comparaTo方法用字符串的默认排序方式判断。我尝试不判断返回0的情况,结果没有异常,表示,当字符串长度相同是,程序自动调用了comparaTo方法,我的疑问是原理是怎么样的,你没有理解我的疑问,请认真读完再回答!
回复 使用道具 举报
看你写了那么多读起来好费劲啊。。
ts.add("abcd");
  ts.add("ab");
  ts.add("abcdef");
  ts.add("a");
  ts.add("a");
你添加的这几个元素。。只能添加进去4个
  ts.add("a");
  ts.add("a");
你没有重写equals方法所以这个只能天津区一个。。
排序时候不会出现s1.length()==s2.length()的情况。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马