黑马程序员技术交流社区
标题:
treeset保证唯一性
[打印本页]
作者:
孙天
时间:
2012-4-23 20:57
标题:
treeset保证唯一性
我把字符串存到arraylist里面,遍历后再用treeset存进去保证唯一性,为什么得不出结果
public class d7 {
public static void main(String[] args) {
String str="fgdfgfgh";
sys(str);
}
private static <E> void sys(String str) {
char[] chs=str.toCharArray();
ArrayList<Character> list=new ArrayList<Character>();
TreeSet<Object> temp=new TreeSet<Object>(new ComparatorByObject());
for(int x=0;x<chs.length;x++){
list.add(chs[x]);
}
char[] chr={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for(int x=0;x<chr.length;x++){
Object obj=chr[x];
int count=0;
while(list.contains(obj)){
count++;
list.remove(obj);
temp.add(obj);
}
Iterator<Object> it=temp.iterator();
while(it.hasNext()){
System.out.print(it.next()+":"+count+".");
}
}
}
}
class ComparatorByObject implements Comparator<Object>{
Object o1;
Object o2;
public int compare(Object o1,Object o2){
int temp=(o1.toString()).compareTo(o2.toString());
return temp;
}
}
作者:
袁冬梅
时间:
2012-4-23 23:58
import java.util.*;
class UniArraylist {
public static void main(String[] args) {
String str="fgdfgfgh";
sys(str);
}
private static <E> void sys(String str) {
char[] chs=str.toCharArray();
System.out.println(chs);
ArrayList<Character> list1=new ArrayList<Character>();
TreeSet<Object> temp=new TreeSet<Object>(new ComparatorByObject());
for(int x=0;x<chs.length;x++){
if(!list1.contains(chs[x]))
{
list1.add(chs[x]);
temp.add(chs[x]);
System.out.println(temp);
}
}
Iterator<Object> it=temp.iterator();
while(it.hasNext()){
System.out.print(it.next());
}
System.out.println();
/*
char[] chr={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for(int x=0;x<chr.length;x++){
Object obj=chr[x];
int count=0;
while(list.contains(obj)){
count++;
list.remove(obj);
temp.add(obj);
}
Iterator<Object> it=temp.iterator();
while(it.hasNext()){
System.out.println(it.next()+":"+count+".");
}
}
*/
}
}
class ComparatorByObject implements Comparator<Object>{
Object o1;
Object o2;
public int compare(Object o1,Object o2){
int temp=(o1.toString()).compareTo(o2.toString());
return temp;
}
}
复制代码
作者:
袁冬梅
时间:
2012-4-24 00:22
本帖最后由 袁冬梅 于 2012-4-24 00:24 编辑
悲剧的网速。。。
上面的是我这边改的。
另外,你还可以把你代码的set的迭代器拿出for循环来,在打印就是你的set里面的内容了,还有,count这个计数器要用来做什么?每一次for循环他都会被清0,根本没做到计数的效果。如果要想弄计数效果,我觉得可能用map会比较好。↖(^ω^)↗,希望能帮到你。
作者:
郑光
时间:
2012-4-24 00:27
第一个问题,for循环内的while改成if,因为如果(list.contains(obj))一次为真,这个while就一直循环下去了。
第二个问题,treeset的遍历应该放到for循环外面
这样2点改掉就得到了dfgh
还有一点,treeset有自动排序的,比如数字按升序,字母从a到z,如果不需要改变原来的顺序,那个比较类就不需要了
作者:
郑光
时间:
2012-4-24 00:39
那个count是不是统计每个字母出现的次数?这样的话把字符串放到treemap里面更好,value直接就是每个字母出现的次数,开始为0,出现一次+1,实现起来比较简单。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2