Java学习第十三天

1.collection接口:
  List:接口,存储的数据是有序的(集合存储数据的顺序和添加数据的顺序是一致的),存储的数据是可以重复的
    ArrayList:底层数据结构使用的是数组,线程不安全的,查找速度快,增删速度慢(数组开辟的内存是连续的)
    Vector:底层数据结构使用的是数组, 线程安全的,查找速度快,增删速度慢,被ArrayList替代了
    LinkedList:底层数据结构使用的是链表,线程不安全的,查找速度慢,增删速度快

  set接口:存储的数据是为无序的,存储的数据是不可以重复的(不能存储相同的对象)

    HashSet:数据结构是哈希表,线程不安全的,替代了HashTable

    TreeSet:底层使用的是二叉树,线程不安全的,可以排序

    注意:Set有没有自己特有的功能:没有

2.HashSet:数据结构是哈希表,线程不安全的,替代了HashTable
    向集合中添加元素时,先比较哈希值,根据哈希算法计算哈希值,确定在堆中地址,如果哈希值都不相同,那么直接存入集合,
  如果出现哈希值相同的,再调用equals()方法进行比较,如果返回true,则认为是相同的对象,则不存入集合,否则存入集合。

  注意:同一个对象哈希值肯定相同,哈希值相同不一定是同一个对象,有可能重写hashCode()函数
     contians()//判断包含某个对象也是依据int hashCode() 和boolean equals()方法
     remove()//删除某个对象也是依据int hashCode() 和boolean equals()方法

3.TreeSet:底层使用的是二叉树,线程不安全的,可以排序

  第一种排序方式:默认情况下TreeSet会调用加入到集合的对象的compareTo方法
    需要对象所属的类实现Comparable接口的int compareTo(Object obj)方法
    TreeSet会根据compareTo方法的返回值来判断谁大谁小,从而实现排序
    当compareTo方法的返回值为0,认为是同一对象,不加入到集合中,这就是TreeSet保证对象唯一的方式


  第二种排序方式:当对象的排序方式不符合我们的需求时,可以自定义排序方式

    Comparator:接口
      自定义排序方式:实现Comparator接口中的 int compare(Object o1,Object o2)
    当存在自定义排序方式时,优先使用自定义的

    按照字符串的长短排:当存在自定义排序方式时,优先使用自定义的排序方式
    自定义排序方式:Comparator接口 int compare(Object o1,Object o2)

  注意:1.排序发生时:添加对象的同时就排序了

     2.TreeSet默认调用对象的compareTo()方法进行比较,因为Person中没有compareTo()方法,TreeSet无法确定谁大谁小,所以报错
     3.一个类的对象如果是可排序的,那么这个类需要实现Comparable接口
     4.如果没有实现Comparable接口,这抛出异常:ClassCastException:

 


4.泛型:使用<引用数据类型>来接收一种引用数据类型,目的是在编译时期就检查集合中的数据的类型,
  如果不是指定的数据类型,则编译不通过,从而把运行时期的问题转移到了编译时期,提高了程序的安全性

  作用:使用了泛型,在实现自定义排序方法时就不用类型转换了
     添加的数据要和泛型的数据类型一致
     通过泛型,确定集合中存储的数据的类型

5.一个类或接口能使用泛型,因为在定义类或接口时定义了泛型

 

 

 1 定义泛型类:
 2 
 3 /*
 4 定义泛型类
 5 
 6 class Student
 7 {
 8 }
 9 class Worker
10 {
11 }
12 //使用泛型前
13 class Tool
14 {
15 private Object obj;
16 
17 public void setObj(Object obj){
18 this.obj=obj;
19 }
20 public Object getObj()
21 {
22 return obj;
23 }
24 }*/
25 /*class Tool<T> //定义类
26 {
27 private T obj;
28 
29 public void setObj(T obj){
30 this.obj=obj;
31 }
32 
33 public T getObj(){
34 return obj;
35 }
36 }
37 class Demo9 
38 {
39 public static void main(String[] args) 
40 { 
41 Student stu = new Student();
42 Tool<Student> tool=new Tool<>();
43 
44 tool.setObj(stu);
45 
46 Student w=(Student)tool.getObj();
47 
48 
49 //Student stu = new Student();
50 //Tool tool=new Tool();
51 //tool.setObj(stu);
52 //Worker worker = (Worker)tool.getObj();//编译时期没问题,运行异常    
53 }
54 }

 

posted on 2019-08-11 17:04  small_slag  阅读(202)  评论(0编辑  收藏  举报

导航