集合框架
一 集合概念:
对象的容器,实现了对对象的常用操作,类似数组功能。
二:和数组的区别
- 数组定义时需要确定长度,但集合不需要。
- 数组可以存储基本类型和引用类型,而集合只能存储引用类型(基本类型可以实现装箱进行存储)。
collection集合体系图
collection方法的使用
Collection ct=new ArrayList(); //注意:接口不能实例化,只能调用子类的实现类
ct,add("苹果"); //向ct集合中添加元素。
ct.add("香蕉");
ct.remove("香蕉"); //删除该元素
ct.clear(); //删除所有元素
// 使用增强for循环遍历集合元素
for(Object object:ct){ //注意点:因为该集合没有下标,不能使用for循环遍历
system.out.printlf(object);
}
//使用迭代器遍历集合元素
Iterator it =ct.iterator();
while(it.hasnext()){ //hasnext()判断还有没有集合元素了
String s=(String)it.next(); //next()将集合元素取出来
system.out.printlf(s);
it.remove(); //注意点:在使用iterator迭代器时循环时,不能使用collection集合remove方法删除,只能使用iterator自身的remover方法。
}
ct.contains("苹果"); //判断集合中是否含有该元素
ct.isEmpty(); //判断集合是否为空
List集合
特点:有序、有下标、元素可重复。
List实现类
- ArrayList类:
- 数组结构实现,查询快,增删慢。
- 运行效率快,线程不安全。
- Vector类:
- 数组结构实现,查询快,增删慢。
- 运行效率慢,线程安全。
- LinkedList类:
- 链表结构实现,增删快,查询慢。
泛型
其本质时参数化类型,把类型作为参数传递。
-
好处: 1.提高代码的重用性
2.防止类型转换异常,提高代码的安全性。
泛型集合
概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致
- 特点:
- 编译时即可检查,而非运行时抛出异常。
- 访问时,不必进行类型转换。
- 不同泛型之间引用不能相互赋值,泛型不存在多态性。
Set集合
特点:无序、无效标、集合元素不能重复。
Set实现类:HashSet: 存储结构 哈希表(数组+链表+红黑树)
- 基于HashCode计算元素存放的位置。
- 当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入。
TreeSet: 存储结构:红黑树
- 基于排列顺序实现元素不重复(红黑树)
- 实现了SortedSet接口,对集合元素自动排序。
- 元素对象的类型必须实现Comparable接口,指定排列规则。
- 通过CompareTo方法确定是否为重复元素。
Map集合
特点:
- 用于存储任意键值对(Key-Value)
- 键:无序、无下标、不允许重复(唯一)
- 值:无序、无下标、允许重复
- 遍历集合元素通常使用keySet()和entrySet()方法实现;
HashMap实现类
- 线程不安全,运行效率快;允许用null作为key 或者value;
- 存储结构为哈希表(数组+链表+红黑树)
- HashMap为什么是等链表长度为8才转红黑树
- 因为通常情况下,链表长度很难达到8,但是特殊情况下链表长度为8,哈希表容量又很大,造成链表性能很差的时候,只能采用红黑树提高性能
- HashMap容量扩容是为什么是2的幂数
- 是因为容量是2的n次幂,可以使得添加的元素均匀分布在HashMap中的数组上,减少hash碰撞,避免形成链表的结构,使得查询效率降低!
- HashMap如何解决hash碰撞
- 定义一个负载因子,默认的为0.75,当容量超出容量得白分之75,HashMap会进行自动扩容,以解决HashMap碰撞。
Hashtable:
- 线程安全,运行效率慢;不允许用null作为key 或者value;
Properties:
- Hashtable的子类,要求key 和value都是String类型的。通常用于配置文件的读取。
- 特点:
- 1存储属性名和属性值
- 2属性名和属性值都是字符串类型
- 3没有泛型
- 4和流有关
TreeMap实现类
- 元素对象的类型必须实现Comparable接口,指定排列规则。
- 实现了SortedMap接口(Map的子接口),可以对key进行自动排序。