黑马程序员——>第十五天<集合框架(TreeSet-泛型)>
2013-04-11 17:24
393 查看
-------android培训、java培训、期待与您交流-------
01集合框架(TreeSet)
Set:无序,不可以重复元素。
|--HashSet:数据结构是哈希表。线程是非同步的。
保证元素唯一性的原理:判断元素的hashCode值是否相同。
如果相同,还会继续判断元素的equals方法,是否为true。
|--TreeSet:可以对Set集合中的元素进行排序。
02集合框架(TreeSet存储自定义对象)
需求:
往TreeSet集合中存储自定义对象学生。
想按照学生的年龄进行排序。
记住,排序时,当主要条件相同时,一定判断一下次要条件。
要想自定义一个对象, 自定义一个学生对象,里边要定义一个HashCode和equals,同时还要定义使class Student implements Comparable 学生类实现Comparable接口,让学生具备默认的比较性。这样既可以存放到HashSet TreeSet集合当中,不一定要存到哪个集合当中去,所以这些基本的东西要具备
03集合框架(二叉树)
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也成为元素的自然顺序,或者叫做默认顺序。
04集合框架(实现Comparator方式排序)
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
当元素自身不具备比较性,或者具备的比较性不是所需要的。
这时需要让容器自身具备比较性。
定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
05集合框架(泛型概述)
泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
好处
1.将运行时期出现问题ClassCastException,转移到了编译时期。,
方便于程序员解决问题。让运行时问题减少,安全。,
2,避免了强制转换麻烦。
06集合框架(泛型使用)
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,
只要见到<>就要定义泛型。
其实<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型在比较器当中的应用,程序代码变得越来越简单,相对要安全很多
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,
早期定义Object来完成扩展。
现在定义泛型来完成扩展。
07集合框架(泛型方法)
泛型类定义的泛型,在整个类中有效。如果被方法使用,
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定。
那么可以将泛型定义在方法上。
08集合框架(静态方法泛型)
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
09集合框架(泛型接口)
见到带泛型的内容时,用的时候需要向里边传参数,
定义接口不多见。一般都定义泛型类和方法,
如果定义静态方法,泛型一定定义在方法上
10集合框架(泛型限定)
泛型的高级应用
? 通配符。也可以理解为占位符。
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
用泛型好处可以增加扩展性。弊端:不能使用类型特有方法
在使用多态时,多态虽然提高了扩展性,但是不能预先使用子类中的特有方法
泛型限定是用于进行泛型扩展用的
-------android培训、java培训、期待与您交流-------
01集合框架(TreeSet)
Set:无序,不可以重复元素。
|--HashSet:数据结构是哈希表。线程是非同步的。
保证元素唯一性的原理:判断元素的hashCode值是否相同。
如果相同,还会继续判断元素的equals方法,是否为true。
|--TreeSet:可以对Set集合中的元素进行排序。
02集合框架(TreeSet存储自定义对象)
需求:
往TreeSet集合中存储自定义对象学生。
想按照学生的年龄进行排序。
记住,排序时,当主要条件相同时,一定判断一下次要条件。
class TreeSetDemo { public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(new Student("lisi02",22)); ts.add(new Student("lisi007",20)); ts.add(new Student("lisi09",19)); ts.add(new Student("lisi08",19)); //ts.add(new Student("lisi007",20)); //ts.add(new Student("lisi01",40)); Iterator it = ts.iterator(); while(it.hasNext()) { Student stu = (Student)it.next(); System.out.println(stu.getName()+"..."+stu.getAge()); } } } class Student implements Comparable//该接口强制让学生具备比较性。 { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Object obj) { //return 0; if(!(obj instanceof Student)) throw new RuntimeException("不是学生对象"); Student s = (Student)obj; System.out.println(this.name+"....compareto....."+s.name); if(this.age>s.age) return 1; if(this.age==s.age) { return this.name.compareTo(s.name); //记住,排序时,当主要条件相同时,一定判断一下次要条件。 } return -1; } public String getName() { return name; } public int getAge() { return age; } }
要想自定义一个对象, 自定义一个学生对象,里边要定义一个HashCode和equals,同时还要定义使class Student implements Comparable 学生类实现Comparable接口,让学生具备默认的比较性。这样既可以存放到HashSet TreeSet集合当中,不一定要存到哪个集合当中去,所以这些基本的东西要具备
03集合框架(二叉树)
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也成为元素的自然顺序,或者叫做默认顺序。
04集合框架(实现Comparator方式排序)
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
当元素自身不具备比较性,或者具备的比较性不是所需要的。
这时需要让容器自身具备比较性。
定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
05集合框架(泛型概述)
泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
好处
1.将运行时期出现问题ClassCastException,转移到了编译时期。,
方便于程序员解决问题。让运行时问题减少,安全。,
2,避免了强制转换麻烦。
06集合框架(泛型使用)
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,
只要见到<>就要定义泛型。
其实<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型在比较器当中的应用,程序代码变得越来越简单,相对要安全很多
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,
早期定义Object来完成扩展。
现在定义泛型来完成扩展。
07集合框架(泛型方法)
泛型类定义的泛型,在整个类中有效。如果被方法使用,
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定。
那么可以将泛型定义在方法上。
08集合框架(静态方法泛型)
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
09集合框架(泛型接口)
//在实现时也不知道要操作什么类型, class InterImpl<T> implements Inter<T> { //子类不指定类型,由调用者来指定 public void show(T t) { System.out.println("show :"+t); } } class GenericDemo5 { public static void main(String[] args) { InterImpl<Integer> i = new InterImpl<Integer>(); i.show(4); //InterImpl i = new InterImpl(); //i.show("haha"); } }
见到带泛型的内容时,用的时候需要向里边传参数,
定义接口不多见。一般都定义泛型类和方法,
如果定义静态方法,泛型一定定义在方法上
10集合框架(泛型限定)
泛型的高级应用
? 通配符。也可以理解为占位符。
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
用泛型好处可以增加扩展性。弊端:不能使用类型特有方法
在使用多态时,多态虽然提高了扩展性,但是不能预先使用子类中的特有方法
泛型限定是用于进行泛型扩展用的
-------android培训、java培训、期待与您交流-------
相关文章推荐
- 黑马程序员---集合框架<泛型>
- 黑马程序员——第15天——(API)集合框架(TreeSet,泛型)
- 黑马程序员 Java基础<七>---> 集合框架
- 黑马程序员——集合框架(TreeSet)
- 黑马程序员—最常用的一个集合 泛型集合List<>
- (72)泛型限定:?的用法,TreeSet(Collection<? extends E> c)参数的理解
- 黑马程序员——>第十六天<集合框架(Map)>
- 黑马程序员之<hashset,treeset>
- 深入学习java集合:TreeSet<E>实现
- Java笔记4 JavaAPI<2>TreeSet、Comparator、泛型
- 黑马程序员java基础之集合Set中的TreeSet和泛型
- day17 集合框架 LinkedHashSet TreeSet Map 泛型
- 黑马程序员_java_集合框架_Collection_List_Set_泛型
- 黑马程序员------List<>泛型集合
- 黑马程序员——>第十四天<集合框架(迭代器-List-ArrayList-HashSet)>
- 黑马程序员---Dictionary<>字典,List<>泛型集合实例练习
- 黑马程序员_JavaSE基础17 之 集合框架 Vector LinkedList ArrayList HashSet LinkedHasSet TreeSet
- Java集合源码分析(六)TreeSet<E>
- 黑马程序员------TreeSet集合框架存储自定义元素之排序Comparable与Comparator
- 黑马程序员--JAVA<API>--集合、泛型等