千锋逆战班学习第25天
努力或许没有收获,但不努力一定没收获,加油。
今天我学了Java课程的集合。
中国加油!!!武汉加油!!!千锋加油!!!我自己加油!!!
集合:
- Collection体系集合:
I. Collection父接口:该体系结构的根接口,代表一组对象,称为“集合”,每个对象都是该集合的“元素”。
II. List接口的特点:有序、有下标、元素可重复。
III. Set接口的特点:无序、无下标、元素不可重复。 - List子接口:
I. 特点:有序、有下标、元素可以重复。
II. 继承可父接口提供的共性方法,同时定义了一些独有的与下标相关的操作方法。 - List实现类:
I. JDK8的ArrayList,实际初始长度是0
II. 首次添加元素时,需要实际分配数组空间,执行数组扩容操作
III. 真正向数组中插入数据,(Lazy懒)用的时候再创建,或再加载,有效的降低无用内存的占用 - ArrayList:
I. 数组结构存储,查询快,增删慢。//注册(1次)-> 查询(N次)
II. JDK 1.2发布,执行效率快,线程不安全。 - Vector:
I. 数组结构存储,查询快,增删慢。
II. JDK 1.0发布,执行效率慢,线程安全。 - LnkedList:
I. 链表(链接列表)结构存储,查询慢、增删快。
II. 了解:Queue接口:队列、双端队列
III. 了解:栈结构Last In First Out(后进先出)
IV. 了解:队列结构First In First Out(先进先出) - 泛型集合【重点-解决应用问题】:
I. 概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致。
II. 特点:
1). 编译时即可检查,而非运行时抛出异常。
2). 访问时,不必类型转换(拆箱)。
3). 不同泛型之间引用不能相互赋值,泛型不存在多态。 - 泛型:高级类别的知识,熟练应用,需要时间、经验的积累(常用名称:E = Element / T = Type / K = Key / V = Value)
I. 概念:约束-规范类型
II. 泛型的场景:
1). 定义泛型:
A). 实例泛型:
a). 类:创建对象时,为类所定义的泛型,进行参数化赋值
b). 接口:实现接口时,为接口所定义的泛型,进行参数化赋值
B). 静态泛型:
a). 定义在方法的返回值类型前面:、、<T extends Comparable>、<T extends Comparable<? super T>> 可应用在形参列表、返回值两种场景上,不单单可以规范泛型,还可以语义化返回值。
b). 定义在方法的形参列表当中:<?>、<? extends Object>、<? super Integer>,不支持使用& 只能应用在形参列表上,规范泛型。 - Collections工具类:
概念:集合工具类,定义了除了存取以外的集合常用方法。
I. public static <T extends Comparable<? super T>> void sort(List list) //排序,要求:必须实现Comparable,必须可与自身类型比,以及父类类型比
II. public static void reverse(List<?> list) //反转、倒置元素
III. public static void shuffle(List<?> list) //随机重置顺序 - Set子接口:
I. 特点:无序、无下标、元素不可重复(当插入新元素时,如果新元素与已有元素进行equals比较,结果为true时,则拒绝新元素的插入)
II. 方法:全部继承自Collection中的方法 - foreach循环:
for(数据类型 变量名 : 容器名称){ //可遍历集合或数组(常用在无序集合上)
} - Set接口实现类:
I. HashSet【重要】:
1). HashSet的底层使用的HashMap类,即是将所有需要存入HashSet的值,直接保存在HashMap中
2). HashSet如何去掉重复?
3). 先判断hashCode是否一致,==比较地址,equals比较内容
II. LinkedHashSet【了解】:
1). 底层使用LinkedHashMap(链表结构)存储,节点形式单独存储数据,并可以指向下一个节点,通过顺序访问节点,可保留元素插入顺序
III. TreeSet【了解】:
1). 实现了SortedSet接口,要求必须可以对元素排序。
2). 所有插入元素,必须实现Comparable接口,覆盖compareTo方法。
3). 根据compareTo方法返回0作为去重的依据,(意味重复) - Map体系集合:
I. Map:地图、映射
I. 概念:存储一对数据(Key-value),无序、无下标、键不可重复、值可以重复。
II. HashMap算法:拿到任何一个对象好,通过hash(key)做运算,key>>>16(除以16),只可能得到0~15之间的一个数组,作为插入数组的下标
III. Hashtable:HashMap的线程安全版本
IV. TreeMap:自动对key做排序,根据compareTo的返回值去重
V. Properties:Hashtable 子类,主要用于存储key和value都是字符串的情况,常在读取配置文件之后,保存文件中的键值对。反射、JDBC