java基础第九天——泛型

时间:2021-05-07 20:51:44
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高

Vector:
底层数据结构是数组,查询快,增删慢
线程安全, 效率低

特有方法:
public void addElement(E obj) --> add()
public E elementAt(int index) --> get(int index)
public Enumeration<E> elements() ---> iterator()
boolean hasMoreElements() ---> hasNext()
E nextElement()  ---> next()

LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高

特有方法:
void addFirst(E e)   将指定元素插入此列表的开头。 
  void addLast(E e)  将指定元素添加到此列表的结尾。 
E getFirst()  返回此列表的第一个元素
E getLast()  返回此列表的最后一个元素 
E removeFirst()  移除并返回此列表的第一个元素。
E removeLast()  移除并返回此列表的最后一个元素
 
Stack: 栈
方法:
boolean empty()   测试堆栈是否为空 
E push(E item)  把项压入堆栈顶部。 
E pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象 
—————————————————————————————
去除集合中字符串的重复值
方式1: 采用选择排序算法
方式2: 创建新集合方式
—————————————————————————————
泛型: 用来约束数据的数据类型
泛型的格式:
<数据类型>
泛型可以使用在 类,接口,方法,变量上
 
泛型的好处
A:提高了程序的安全性
B:将运行期遇到的问题转移到了编译期
C:省去了类型强转的麻烦


泛型类, 就是把泛型的声明 定义在类上
如何声明一个泛型类 :
格式 : public class 类名 <泛型类型> {}


什么时候将泛型的类型确定的?
创建对象的时候确定的


泛型方法: 把泛型定义声明在方法上
如何声明一个泛型方法:
格式:public <泛型类型> 返回类型 方法名(泛型类型 .)


什么时候将泛型的类型确定的?
调用方法的时候确定的


泛型接口: 把泛型定义在接口上
如何声明一个泛型接口:
格式:public  interface 接口名<泛型类型1…>

什么时候将泛型的类型确定的?
创建接口子类对象的时候确定的


泛型高级(通配符):
泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
? 理解为就是 Object类型

<? extends E>
向上限定,E及其子类
? extends Animal
? 代表的就是Animal类本身或者是Animal类的子类

<? super E>
向下限定,E及其父类
? super Animal

? 代表的就是Animal类本身或者是Animal类的父类

—————————————————————————————

无论登入还是注册 都是与用户相关的信息


所以,我们要提供一个 用户类
class User {
String 用户名;
String 密码;

public boolean 登录 (用户名, 密码){}
public boolean 注册 (用户类对象 ){}  
}
—————————————————————————————
随着将来功能的增加,把所有的内容 都放在 用户类中是不合适的

把 用户类 进行拆解: 拆解成 用户基本信息类 与 用户功能操作类

class 用户基本信息类 {
String 用户名;
String 密码;
}

class 用户功能操作类 {
public boolean 登录 (用户名, 密码){}
public boolean 注册 (用户类对象 ){}  


—————————————————————————————

界面
选择对应的功能
1: 登入
输入用户名与密码信息
调用登入功能
2: 注册
创建用户对象
调用注册功能
3: 退出
结束JVM
—————————————————————————————
按功能进行分包操作:


pojo: 具体的实体类
User.java 用户类
 
ui:  界面
MainApp.java 界面类
 
dao: 具体的功能类的接口
UserDao.java 用户功能接口文件
登入功能(抽象方法)
注册功能(抽象方法)

dao.impl: 具体功能类的实现类包
UserDaoImpl.java 用户功能具体实现类
登入功能(具体方法)
注册功能(具体方法)
—————————————————————————————

Set:
|- HashSet
|- LinkedHashSet

|- TreeSet


set: 
元素唯一不能重复


HashSet:
元素唯一不能重复
底层结构是 哈希表结构
元素的存与取的顺序不能保证一致
如何保证元素的唯一的?
重写hashCode() 与 equals()方法



LinkedHashSet:
元素唯一不能重复
底层结构是 哈希表结构 + 链表结构
元素的存与取的顺序一致
如何保证元素的唯一与有序的?
元素唯一: 哈希表结构保证的
元素有序: 链表结构保证的


TreeSet:
元素唯一不能重复
底层结构是 二叉树结构
元素的存与取的顺序不能保证一致
但是,在集合内部进行了元素的排序【自然排序,比较器排序】
自然排序接口 Comparable<T> 
实现方法 public abstract int compareTo(T obj);

比较器排序接口 Comparator<T>
实现方法 public abstract int compare(T obj1, T obj2);

TreeSet集合是如何保证元素唯一并有序的?
自然排序接口 Comparable<T>
比较器排序接口 Comparator<T>