【ThinkingInJava】50、使用特定的set
来源:互联网 发布:天猫魔盒看电视剧软件 编辑:程序博客网 时间:2024/06/15 17:08
/*** 书本:《Thinking In Java》* 功能:使用特定的set* 文件:TypesForSets.java* 时间:2015年5月2日11:05:43* 作者:cutter_point*/package Lesson17Containers;import java.util.HashSet;import java.util.LinkedHashSet;import java.util.Set;import java.util.TreeSet;class SetType{int i;public SetType(int n) { i = n; }public boolean equals(Object o){//首先判定进来比较的是不是SetType这个类型,然后比较里面的值是不是一样的return o instanceof SetType && (i == ((SetType)o).i);}public String toString(){return Integer.toString(i);//返回i的字符串显示}}class HashType extends SetType{//这里注意,如果继承的类里面有构造函数,那么继承的子类也必须有构造函数初始化父类public HashType(int n){super(n);}public int hashCode() { return i; }}class TreeType extends SetType implements Comparable<TreeType>{public TreeType(int n){super(n);}public int compareTo(TreeType arg)//实现Comparable接口{//arg的成员变量i不是私有的,所以可以直接取出来//如果参数比成员元素大那就返回-1//比成员元素小,返回1//如果相等那就返回0return (arg.i < i ? -1 : (arg.i == i ? 0 : 1));//treeSet的排序应该是-1排前面去,1排后面去}}public class TypesForSets{//以set集合和一个Class为参数,对set进行填充static <T> Set<T> fill(Set<T> set, Class<T> type){try{for(int i = 0; i < 10; ++i)//给set添加10个实例set.add(type.getConstructor(int.class).newInstance(i));//首先得到构造器,然后传入一个int类型的参数,然后实例化} catch (Exception e){throw new RuntimeException(e);}return set;}static <T> void test(Set<T> set, Class<T> type){TypesForSets.fill(set, type);TypesForSets.fill(set, type);TypesForSets.fill(set, type);//添加多次一样的数据和添加一次的结果是相同的System.out.println(set);}public static void main(String[] args){test(new HashSet<HashType>(), HashType.class);//以一个神秘的次序排列test(new LinkedHashSet<HashType>(), HashType.class);//以插入的循序排列 test(new TreeSet<TreeType>(), TreeType.class);//以compareTo的次序排列,这里是倒序 // Things that don't work://但是当没有实现hashCode 而是用默认的话,那么set就会失去去除重复的功能 test(new HashSet<SetType>(), SetType.class); test(new HashSet<TreeType>(), TreeType.class); test(new LinkedHashSet<SetType>(), SetType.class); test(new LinkedHashSet<TreeType>(), TreeType.class); try { test(new TreeSet<HashType>(), HashType.class); } catch(Exception e) { System.out.println(e.getMessage()); }}}
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[1, 1, 8, 4, 9, 0, 0, 2, 3, 9, 6, 7, 8, 4, 7, 3, 2, 5, 3, 7, 9, 4, 0, 5, 2, 1, 5, 6, 8, 6]
[2, 6, 0, 7, 9, 7, 5, 2, 6, 2, 7, 3, 4, 8, 1, 6, 4, 1, 3, 3, 8, 5, 9, 8, 0, 1, 9, 0, 5, 4]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
java.lang.ClassCastException: Lesson17Containers.HashType cannot be cast to java.lang.Comparable
0 0
- 【ThinkingInJava】50、使用特定的set
- 【ThinkingInJava】36、关于set的小工具
- 【ThinkingInJava】20、控制框架的使用(初始化系统使用)
- 【ThinkingInJava】11、接口使用
- 异常使用------ThinkingInJava
- ThinkingInJava
- set 删除某个特定值的用法
- 【ThinkingInJava】28、泛型类的语法
- Android app中所有页面的特定颜色,被改变为另一状态,只因使用了getBackground().set…
- 【ThinkingInJava】55、对set中的操作测试性能比较
- RadioButton的特定使用场景
- Java反射代码--06.执行所有特定的set方法
- WordPress 让特定的文章使用特定的CSS样式
- 【ThinkingInJava】4、关于finalize()的调用
- 【ThinkingInJava】17、匿名类的工厂方法
- 【ThinkingInJava】19、控制框架的实现
- 【ThinkingInJava】22、得到系统的环境变量
- 【ThinkingInJava】34、java的动态代理(2)
- 【ThinkingInJava】48、java中Collection的各种操作
- C# 并行编程 之 限制资源的并发访问 使用SemaphoreSlim
- windows eclipse远程连接hadoop2.6
- 【ThinkingInJava】49、List的各种功能方法
- Apache Lucene 5.1.0 入门使用篇
- 【ThinkingInJava】50、使用特定的set
- 互联网精神
- 代立东-----使用MAT分析内存泄露【还有其他文章都是BigData优化方面的内容,很有用】
- OPENCV的学习:AdaptiveThreshold函数
- C++容器 java集合
- android之switch控件的用法
- 【ThinkingInJava】51、散列与散列码
- 微信摇一摇优惠券
- 通过外网端口映射访问FTP