集合二

一、泛型

1、概述

泛型JDK1.5引入的一种安全检测机制。就是一种对集合的约束,约束集合只能存入的数据类型。

  • 好处:把运行时期的问题提前到了编译时期。
  • 避免了强制类型转换

我们创建集合是可以不写泛型,但这样会给我们带来很多不麻烦与错误。像下面这样

没有泛型约束,那么这个集合的类型就是Object类型。可以存入任何数据类型的元素。但是当我们存入不同元素时,我们需要操作这个集合中的元素时,我们会发现该数据类型所提供的的方法我们不能使用。

ArrayList list = new ArrayList();

java 集合中对象属性值相加_java

2、自定义泛型

1、定义格式:

1、单类型:尖括号任意书写,一般只写一个字母 E,T,Q

2、多类型:尖括号任意书写,一般只写一个字母<E,T,Q>

2、泛型类

修饰符 class 类名<类型>{}

public class Generic<T>{}

java 集合中对象属性值相加_泛型_02

3、泛型方法

修饰符<类型> 返回值类型方法名(类型 变量名){}

public <T> void show(T t){}

java 集合中对象属性值相加_泛型_03

<T> T[] toArray(T[] a) 返回指定类型的所有数组元素

java 集合中对象属性值相加_泛型_04

3、泛型接口

修饰符 interface 接口名 <类型>{}

public interface Generic<T>{}

java 集合中对象属性值相加_泛型_05

4、通配符

泛型通配符<?>相当于一个任何的类型。

java 集合中对象属性值相加_数据结构_06

java 集合中对象属性值相加_java 集合中对象属性值相加_07

二、Set集合

1、概述

Set是一个接口,实现类分别是HashSet和TreeSet

特点:无序,无索引,不重复 数据结构为:二叉树结构(下文有讲)。

使用方法基本与List相似,但因为Sete无索引,所以不能用索引获取元素,因此不能用普通for循环遍历集合元素。只有迭代器和增强for可用。

java 集合中对象属性值相加_java 集合中对象属性值相加_08

2、TreeSet集合

集合特点:

  • 不包含重复元素的集合。
  • 没有带索引的方法
  • 可以将元素按照规则排序
  • 红黑树结构
TreeSet<Object> set = new TreeSet<>();

3、TreeSet自然排序法

Comparable的使用

  1. 使用空参构造创建TreeSet集合
  2. 自定义的JavaBean类实现Comparable接口
  3. 重写里面的compareTo方法
  4. 根据返回值判断排序方式
    返回值为负数存左边,返回值为0不存,返回值为正数存右边。

java 集合中对象属性值相加_java 集合中对象属性值相加_09

4、TreeSet比较器排序

  1. TreeSet的带参构造方法使用的是比较器排序对元素进行排序。
  2. 比较器排序是让集合构造方法接收Comparator的实现类对象,重写Compare(T o1,T o2)方法。
  3. 重写时,要注意排序规则按照主要条件和次要条件来写。

java 集合中对象属性值相加_泛型_10

三、数据结构

1、二叉树

java 集合中对象属性值相加_java 集合中对象属性值相加_11


java 集合中对象属性值相加_二叉树_12


java 集合中对象属性值相加_java 集合中对象属性值相加_13

2、二叉查找树

java 集合中对象属性值相加_java 集合中对象属性值相加_14


java 集合中对象属性值相加_java_15

3、平衡二叉树

java 集合中对象属性值相加_java 集合中对象属性值相加_16


java 集合中对象属性值相加_数据结构_17


java 集合中对象属性值相加_java 集合中对象属性值相加_18


左旋就是当二叉树不平衡右边长时向左边拉一位,父节点变为10,这样就又平衡了。右旋反之。

java 集合中对象属性值相加_二叉树_19


多个子节点时

java 集合中对象属性值相加_泛型_20

java 集合中对象属性值相加_数据结构_21


java 集合中对象属性值相加_java 集合中对象属性值相加_22

左右,先左旋后在再整体右旋

java 集合中对象属性值相加_数据结构_23


java 集合中对象属性值相加_java_24


java 集合中对象属性值相加_泛型_25