您的位置:首页 > 职场人生

黑马程序员--java集合TreeSet

2013-07-01 21:37 302 查看
-------android培训java培训、期待与您交流!
----------

»知识点总结

1.TreeSet:可以对Set集合中的元素进行排序。

底层数据结构是二叉树。

保证元素唯一性的依据: compareTo方法return 0.

2. TreeSet排序的第一种方式:让元素自身具备比较性。

元素需要实现Comparable接口,覆盖compareTo方法。

也种方式也成为元素的自然顺序,或者叫做默认顺序。

3. TreeSet的第二种排序方式。

当元素自身不具备比较性时,或者具备的比较性不是所需要的。

这时就需要让集合自身具备比较性。

在集合初始化时,就有了比较方式。

⊙代码练习

public static void main(String[] args)
{
//"90 -7 0 18 2 45 4" 将字符串中的数值进行排序。使用TreeSet完成。
String str = "90 -7 0 18 2 45 4";
String[] ss = str.split(" ");
TreeSet ts6 = new TreeSet();
for(String s : ss)
{
ts6.add(Integer.parseInt(s));
}
String str2 = ts6.toString();
String str3 = str2.replace(",", " ");
//str3= str3.replace((CharSequence) new Regexp("[\\[\\]]"), "");
A.print(str3);

String[] chs = str.split(" ");
TreeSet ts5 = new TreeSet(new Comparator(){

@Override
public int compare(Object o1, Object o2)
{
Integer i1 = new Integer((String)o1);
Integer i2 = new Integer((String)o2);

return i1.compareTo(i2);
}

});
for(String s : chs)
{
ts5.add(s);
}
Object[] strArr =  ts5.toArray();
StringBuilder sb = new StringBuilder();
for(int i=0, len=strArr.length; i<len; i++)
{
String str1 = (String) strArr[i];
sb.append(str1);
if(i<len-1)
sb.append(" ");
}
String str2 = sb.toString();
A.print("-"+str2+"-");

//按照字符串长度排序
TreeSet ts4 = new TreeSet(new Comparator(){

@Override
public int compare(Object o1, Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;

int r = new Integer(s1.length()).compareTo(new Integer(s2.length()));
if(r != 0)
return r;
return s1.compareTo(s2);
}

});
ts4.add("aa");
ts4.add("x");
ts4.add("ab");
ts4.add("bcd");
ts4.add("ac");
A.print(ts4);

//TreeSet ts3 = new TreeSet(new StudentComparator());
TreeSet ts3 = new TreeSet();
ts3.add(new Student("w1", 20));
ts3.add(new Student("w2", 30));
ts3.add(new Student("w3", 20));
//ts3.add(new Student("w2", 20));
A.print(ts3);

TreeSet ts2 = new TreeSet();
ts2.add(new Student("w1", 20));
ts2.add(new Student("w2", 30));
ts2.add(new Student("w3", 40));
ts2.add(new Student("w1", 20));
ts2.add(new Student("w4", 40));
for(Iterator it=ts2.iterator(); it.hasNext();)
{
A.print(it.next());
}

}

}

class StudentComparator implements Comparator
{

@Override
public int compare(Object o1, Object o2)
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
A.print(s1.getName()+"-->"+s2.getName());
int r = s2.getName().compareTo(s1.getName());
if(r!=0)
return r;
return new Integer(s2.getAge()).compareTo(new Integer(s1.getAge()));
}
//不实现总是安全的,提高效率
@Override
public boolean equals(Object obj)
{
// TODO Auto-generated method stub
return super.equals(obj);
}

}
-------android培训java培训、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: