java 集合框架的学习笔记
集合框架
-
什么是集合
-
对象得容器,定义了对多个对象进行操作的常用方法。可以实现数组的功能。
-
和数组的区别:
- 数组长度固定,集合长度不固定。
- 数组可以存储基本类型和引用类型。集合只能存储引用类型。
-
位置:Java.util.*;
-
-
Collection接口(代表一组对象,称为“集合”)
- List(有序,有下标,元素可以重复)
- ArrayList:
- 数组结构实现,查询快,增删慢;
- JDK1.2版本,运行效率快,线程不安全。
- LinkList
- 链表实现结构,增删快,查询慢。
- Vector
- 数组结构实现,查询快,增删慢;
- JDK1.0版本,运行效率慢,线程安全。
- ArrayList:
- Set(无序,没下标,不可重复)
- HashSet
- 基于hashCode计算元素存放位置。
- 当存入元素的hash码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入。
- 自动生成的hashcode会用到一个常数31;
- 31是质数,可以减少散列冲突
- 31可以提高效率:i*31=(i<<<5)-i
- SortedSet
- TreeSet:
- 基于排序顺序实现元素不重复。
- 实现了sortedSet接口,对集合元素自动排序。
- 元素对象的类型必须实现Compatable接口,指定排序规则。
- 通过CompareTo方法确定是否为重复元素
- TreeSet:
- HashSet
- List(有序,有下标,元素可以重复)
-
泛型:
- java 泛型是JDK1,5中引入的一个新特征,其本质是参数化类型,把类型作为参数进行传递。
- 常见的形式有泛型类、泛型接口、泛型方法。
- 语法:
- <T,......>T称为类型占位符,表示一种引用类型。
- 好处:
- (1)提高代码的重用性
- (2)防止类型转换异常,提高代码的安全性。
-
泛型集合:
-
概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致。
-
特点:
- 编译时即可检查,而非运行时抛出异常。
- 访问时,不必类型转换(拆箱)。
- 不同泛型之间引用不能相互赋值,泛型不存在多态
不一样的:下面这段代码,教程上会报错,我1.8的就不会报错
ArrayList arrayList = new ArrayList<>(); arrayList.add("ahui"); arrayList.add("angela"); arrayList.add("ahuang"); arrayList.add(123); for (Object o : arrayList) { System.out.println(o); } //教程报错:ClassCastException
-
-
map体系集合:
- Map(Interface):①用于存储任意键值对(Key-Value)②键:无序,无下标,不允许重复(唯一)③值:无序,无下标、允许重复
- HashMap(Class)【重点】
- 遍历的方法:
- map.keySet()获取key数组,然后用key遍历去取;
- map.entrySet()map集合,然后取出来,速度快,一次获取。
- 总结:
- HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table容量调整为16
- 当元素大于阙值(16*0.75=12)时,会进行扩容,扩容后大小时原来的两倍,目的时减少调整元素的个数。
- jdk1.8:当每个链表长度大于八并且数组元素个数大于等于64时,会调整为红黑树,目的时提高执行效率。
- jdk1.8 长度小于8时是链表
- jdk1.8以前,链表是头插入,jdk1.8以后尾插入
- HashSet和HashMap的关系
- HashSet的实现时用的HashMap的key.
- 遍历的方法:
- Hashtable:
- JDK1.0版本,线程安全,运行效率慢,不允许null作为key或者value
- Properties:
- Hashtable的子类,要求key和value都是String。通常用于配置文件的读取
- SortedMap(Interface)
- TreeMap(Class):实现了SortedMap接口,可以对key进行自动排序。
- HashMap(Class)【重点】
- Map(Interface):①用于存储任意键值对(Key-Value)②键:无序,无下标,不允许重复(唯一)③值:无序,无下标、允许重复