Day_1:Java学习(一):核心类库(5)

一、泛型机制:

(1)基本概念:

  • 集合中可以存放不同类型的对象,因为都按照Object类进行操作,为了取数据时表达真实的数据类型,需要进行强制数据转换,由此可能引入类型转换异常
  • 从Java5开始增加泛型机制,在集合名称右侧使用<数据类型>方式,明确可以存放的类型,若存放其他类型则报错。从Java7开始后边的<>里边的内容可以省略,菱形特性。
List<String> lt1 = new LinkedList<>();
  • 只在编译时期有效,在运行过程不区分什么类型

(2)底层原理:参数化类型,让数据类型作为参数传递,其中E相当于占位符

(3)自定义泛型接口/泛型类/泛型方法:在后边增加了类型参数列表,中间用,隔开

  • 集合中不支持基本数据类型,因为都是Object类为基础的。
  • 父类有泛型,子类可以保留或者不保留,也可以在此基础上增加新的泛型
  • 泛型方法是输入参数的时候需要输入泛型参数,而不是具体参数,格式:[访问权限]<泛型> 返回值类型 方法名(泛型标识 参数名称){方法体;}
  • 在静态方法中使用泛型参数时,需要把静态方法定义为泛型方法。

(4)通配符

二、集合(下)

1、Set集合:java.util.Set,是Collection子集合,与List、Queue集合平级。没有先后次序,不允许重复。主要实现类:HashSet类、TreeSet类、LinkedHashSet类。

  • HashSet类:底层采用哈希表进行数据管理。LinkedHashSet类是在此基础上增加了双向链表,记录先后顺序,便于迭代。
  • TreeSet类:底层采用红黑树进行数据管理

(1)元素放入HashSet集合的原理:调用HashCode()方法,获得哈希码值,调用哈希算法,得到哈希值,再计算出元素在哈希表中的索引位置。若索引位置没有元素,直接放入新数据;若该位置有元素,再比较哈希值是否相同,若不相同,直接插入到已有元素的后边;若相同,则使用equals方法与已有元素比较,若相同则插入失败,若不同,直接放入已有元素后边。

  • 重写equals()后要重写HashCode()?因为当两个元素调用equals方法证明相同时,重写HashCode方法可以保证这两个元素获得的哈希码值相同,由此可以产生同一个索引位置,此时只需要跟当前索引位置的已有元素进行比较即可,从而提高效率避免重复元素出现。

(2)二叉树——>有序二叉树(左子节点< 根节点< 右子节点)

  • 红黑树是一种特殊的有序二叉树,比较大小(自然排序规则java.lang.Comparable、比较器规则java.util.Comparator)匿名内部类/lambda表达式:比较器优先于自然排序

2、Map集合:java.util.Map<K,V>集合元素基本单位:单对元素(K:Key目录  V:Value页码),key不可以重复,一个key对应一个value。

主要实现类:HashMap、TreeMap、LinkedHashMap、Hashtable(早期的,与HashMap类似,线程安全,里面的key和value不可以为空)、Properties(处理配置文件属性文件)

(1)常用方法

3、Collections类:主要提供对集合操作或者返回集合的静态方法

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值