黑马程序员_TreeSet 学习总结
来源:互联网 发布:miss淘宝店外设店网址 编辑:程序博客网 时间:2024/05/07 16:52
------Java培训、Android培训、iOS培训、.Net培训期待与您交流! -------
一直没有真正用过TreeSet,这几天一直在研究,写下学习总结,以备不时之需!
1.TreeSet 实现了Set接口隶属于Collection接口。
2.Set 为无序存储,为弥补这一缺陷TreeSet为有序列排序,使用元素的自然顺序对元素进行排序。所存元素不可重复。
3.底层数据结构为哈希表,依靠TreeMap实现。
4.此实现不是同步的,如果多个线程访问一个TreeSet,其中至少一个线程修改了该set,那么它必须外部同步。一般是通过对自然封装该set的对象执行同步操作来完成。
如不存在这样的对象,则应该使用Collections.synchronizedSortedSet方法来“包装”该set。此操作最好是在创建时进行,以防止对set的意外非同步访问
SortedSet s=Collections.synchronizedSortedSet(new TreeSet(...));
5.两种排序方式:第一种实现Comparable接口,实现接口方法compareTo(Object obj) 。
第二种定义比较器实现Comparator接口,实现接口方法compare(Object obj1,Object obj2)。
建议使用比较器方式,1易扩展、2代码可读性、3复用性.
例:实现Comparable方式
import java.util.*;class TreeSetTest implements Comparable{private String name;private int code;public TreeSetTest(String name,int code){this.name=name;this.code=code;}public static void main(String[] args) {TreeSet set=new TreeSet();System.out.println("元素比较:");set.add(new TreeSetTest("第一个",1));//与元素“第四个”重复数字比较nameset.add(new TreeSetTest("第二个",2));set.add(new TreeSetTest("第三个",3));set.add(new TreeSetTest("第四个",1));//与元素“第一个”重复数字比较nameset.add(new TreeSetTest("第五个",5));//重复元素set.add(new TreeSetTest("第六个",4));set.add(new TreeSetTest("第五个",5));//重复元素//循环打印Iterator iterator=set.iterator();System.out.println("TreeSet元素序列:");while(iterator.hasNext()){TreeSetTest treeSet=(TreeSetTest)iterator.next();System.out.println(treeSet.name+"......"+treeSet.code);}}//实现compareTo比较public int compareTo(Object obj){int returnInt=0;if(obj instanceof TreeSetTest){TreeSetTest treeSet=(TreeSetTest)obj;System.out.print(this.name+"......compareTo......"+treeSet.name);//三维运算、简单容易理解 先判断编号升序returnInt=((this.code>treeSet.code)?1:((this.code<treeSet.code)?-1:0));//在编号相同的情况下判断名称。if(returnInt==0)returnInt=this.name.compareTo(treeSet.name);System.out.println(" 比较结果反回:"+returnInt);}return returnInt;}}
运行结果为:
使用比较器:
例:
import java.util.*;class TreeSetComparator {private String name;private int code;public TreeSetComparator(String name,int code){this.name=name;this.code=code;}public String getName(){return this.name;}public int getCode(){return this.code;}public static void main(String[] args) {//使用比较器TsComparatorTreeSet set=new TreeSet(new TsComparator());System.out.println("使用比较器\n元素比较:");set.add(new TreeSetComparator("第一个",1));//与元素“第四个”重复数字比较nameset.add(new TreeSetComparator("第二个",2));set.add(new TreeSetComparator("第三个",3));set.add(new TreeSetComparator("第四个",1));//与元素“第一个”重复数字比较nameset.add(new TreeSetComparator("第五个",5));//重复元素set.add(new TreeSetComparator("第六个",4));set.add(new TreeSetComparator("第五个",5));//重复元素//循环打印Iterator iterator=set.iterator();System.out.println("TreeSet元素序列:");while(iterator.hasNext()){TreeSetComparator treeSet=(TreeSetComparator)iterator.next();System.out.println(treeSet.name+"......"+treeSet.code);}}}class TsComparator implements Comparator{public int compare(Object obj,Object obj2){int returnInt=0;if(obj instanceof TreeSetComparator&&obj2 instanceof TreeSetComparator){TreeSetComparator treeSet=(TreeSetComparator)obj;TreeSetComparator treeSet2=(TreeSetComparator)obj2;System.out.print(treeSet.getName()+"......compareTo......"+treeSet2.getName());//三维运算、简单容易理解 先判断编号升序returnInt=((treeSet.getCode()>treeSet2.getCode())?1:((treeSet.getCode()<treeSet2.getCode())?-1:0));//在编号相同的情况下判断名称。if(returnInt==0)returnInt=treeSet.getName().compareTo(treeSet2.getName());System.out.println(" 比较结果反回:"+returnInt);}return returnInt;}}
运行结果:
0 0
- 黑马程序员_TreeSet 学习总结
- 黑马程序员_TreeSet排序说明
- 黑马程序员_TreeSet集合存储自定义对象
- 黑马程序员_日记46_TreeSet练习
- 黑马程序员_Treeset存储对象的两种方式
- 黑马程序员_TreeSet集合排序的两种方式
- 黑马程序员-基础知识学习总结
- 黑马程序员:IO学习总结
- 黑马程序员_Cookie学习总结
- [黑马程序员]多线程学习总结
- 黑马程序员-HTML学习总结
- 黑马程序员_IO学习总结
- 黑马程序员-HTML学习总结
- 黑马程序员---交通灯学习总结
- 黑马程序员----------------------异常学习总结
- 黑马程序员-基础学习总结
- 黑马程序员---Collection学习总结
- 黑马程序员:多线程学习总结
- POJ 2823线段树水
- HTML语言中TR、TH和TD有什么区别?
- 简史迪斯尼
- 如何绕过oracle listener 监听的密码设置
- 简史动画
- 黑马程序员_TreeSet 学习总结
- 哲理故事
- Codeforces Round #257 (Div. 1)449A - Jzzhu and Chocolate(贪心、数学)
- NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别
- AndroidManifest.xml详解
- HDU 1021 Fibonacci Again (循环体)
- iOS线程总结
- IO多路复用和Reactor模式
- POJ 1719 Shooting Contest 二分匹配