14.1.1 数组和集合
名称 | 长度 | |
---|---|---|
数组 | 长度开始必须指定,且不能更改 | 1. 保存必须为同一类型元素 |
-
进行增加 / 删除元素,比较麻烦 | | 集合 | 动态保存任意多个对象 | 1. 提供了一系列方便的操作对象的方法:add、remove、set、get等
-
使用集合添加,删除新元素,简洁明了 |
14.2 集合的框架体系
-
Java 的集合类很多,主要分为两大类,如图 :[最好背下来]
14.3 Collection 接口和常用方法
14.3.1 Collection 接口实现类的特点
-
collection 实现子类可以存放多个元素,每个元素可以是 Object
-
Collection 接口没有直接的实现子类,是通过它的子接口 Set 和 List 来实现的
-
有些 Collection 的实现类,可以存放重复的元素,有些不可以
-
有些 Collection 的实现类,有些是有序的 (List),有些不是有序的 (Set)
14.3.2 Collection 接口遍历元素方式 1-使用 Iterator(迭代器)
-
案例演示
public static void main(String[] args) { Collection col = new ArrayList(); col.add(new Book("三国演义", "罗贯中", 10.1)); col.add(new Book("小李飞刀", "古龙", 5.1)); col.add(new Book("红楼梦", "曹雪芹", 34.6)); //现在老师希望能够遍历 col 集合 //1. 先得到 col 对应的 迭代器 Iterator iterator = col.iterator(); //2. 使用 while 循环遍历 // while (iterator.hasNext()) {//判断是否还有数据 // //返回下一个元素,类型是 Object // Object obj = iterator.next(); // System.out.println("obj=" + obj); // } //老师教大家一个快捷键,快速生成 while => itit //显示所有的快捷键的的快捷键 ctrl + j while (iterator.hasNext()) { Object obj = iterator.next(); System.out.println("obj=" + obj); } //3. 当退出 while 循环后 , 这时 iterator 迭代器,指向最后的元素 // iterator.next();//NoSuchElementException //4. 如果希望再次遍历,需要重置我们的迭代器 iterator = col.iterator(); System.out.println("===第二次遍历==="); while (iterator.hasNext()) { Object obj = iterator.next(); System.out.println("obj=" + obj); } }
14.3.3 Collection 接口遍历对象方式 2-for 循环增强
-
案例演示
public static void main(String[] args) { List list = new ArrayList(); list.add(new Dog("小黑", 3)); list.add(new Dog("大黄", 100)); list.add(new Dog("大壮", 8)); //先使用 for 增强 for (Object dog : list) { System.out.println("dog=" + dog); } //使用迭代器 System.out.println("===使用迭代器来遍历==="); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object dog = iterator.next(); System.out.println("dog=" + dog); } }
14.4 List 接口和常用方法
-
案例演示
//1. List 集合类中元素有序(即添加顺序和取出顺序一致)、且可重复 [案例] List list = new ArrayList(); list.add("jack"); list.add("tom"); list.add("mary"); list.add("hsp"); list.add("tom"); System.out.println("list=" + list); //2. List 集合中的每个元素都有其对应的顺序索引,即支持索引 // 索引是从 0 开始的 System.out.println(list.get(3));//hsp
14.4.1 List 的三种遍历方式 [ArrayList, LinkedList,Vector]
-
案例演示
//List 接口的实现子类 Vector LinkedList //List list = new ArrayList(); //List list = new Vector(); List list = new LinkedList(); list.add("jack"); list.add("tom"); list.add("鱼香肉丝"); list.add("北京烤鸭子"); //遍历 //1. 迭代器 Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object obj = iterator.next(); System.out.println(obj); } System.out.println("=====增强 for====="); //2. 增强 for for (Object o : list) { System.out.println("o=" + o); } System.out.println("=====普通 for===="); //3. 使用普通 for for (int i = 0; i < list.size(); i++) { System.out.println("对象=" + list.get(i)); }
14.5 ArrayList 底层结构和源码分析
14.5.1 ArrayList 的注意事项
14.5.2 ArrayList 的底层操作机制源码分析(重点,难点.)
14.6 Vector 底层结构和源码剖析
14.6.1 Vector 的基本介绍
14.6.2 Vector 和 ArrayList 的比较
底层结构 | 版本 | 线程安全(同步)效率 | 扩容倍数 | |
---|---|---|---|---|
ArrayList | 可变数组 | jdk1.2 | 不安全,效率高 | 如果有参构造1.5倍 |
如果是无参 |
-
第一次 10
-
从第二次开始按1.5倍扩容 | | Vector | 可变数组Object[] | jdk1.0 | 安全,效率不高 | 如果是无参,默认10,满后,就按2倍扩容 如果指定大小,则每次直接按2倍扩容 |
14.7 LinkedList 底层结构
14.7.1 LinkedList 的全面说明
14.7.2 LinkedList 的底层操作机制
14.8 ArrayList 和 LinkedList 比较
底层结构 | 增删的效率 | 改查的效率 | |
---|---|---|---|
ArrayList | 可变数组 | 较低,通过数组扩容 | 较高 |
LinkedList | 双向链表 | 较高,通过链表追加 | 较低 |
14.9 Set 接口和常用方法
14.9.1 Set 接口基本介绍
14.9.2 Set 接口的遍历方式
14.10 Set 接口实现类-HashSet
14.10.1 HashSet 底层机制说明
14.11 Set 接口实现类-LinkedHashSet
14.11.1 LinkedHashSet 的全面说明
14.12 Map 接口和常用方法
14.12.1 Map 接口实现类的特点 [很实用]
14.13 Map 接口实现类-HashMap
14.13.1 HashMap 小结
14.13.2 HashMap 底层机制及源码剖析
14.14 Map 接口实现类-Hashtable
14.14.1 HashTable 的基本介绍
14.14.2 Hashtable 和 HashMap 对比
版本 | 线程安全(同步) | 效率 | 允许null键null值 | |
---|---|---|---|---|
HashMap | 1.2 | 不安全 | 高 | 可以 |
Hashtable | 1.0 | 安全 | 较低 | 不可以 |
14.15 Map 接口实现类-Properties
14.15.1 基本介绍
14.16总结-开发中如何选择集合实现类(记住)
14.17 Collections 工具类总结
14.17.1 Collections 工具类介绍
14.17.2 排序操作:(均为 static 方法)
功能 | |
---|---|
reverse(List) | 反转 List 中元素的顺序 |
shuffle(List) | 对 List 集合元素进行随机排序 |
sort(List) | 根据元素的自然顺序对指定 List 集合元素按升序排序 |
sort(List, Comparator) | 根据指定的 Comparator 产生的顺序对 List 集合元素进行排序 |
swap(List, int, int) | 将指定 list 集合中的 i 处元素和 j 处元素进行交换 |
14.17.3 查找、替换
功能 | |
---|---|
Object max(Collection) | 根据元素的自然顺序,返回给定集合中的最大元素 |
Object max(Collection,Comparator) | 根据 Comparator 指定的顺序,返回给定集合中的最大元素 |
Object min(Collection) | 根据元素的自然顺序,返回给定集合中的最小元素 |
Object min(Collection,Comparator) | 根据 Comparator 指定的顺序,返回给定集合中的最小元素 |
int frequency(CollectionObject) | 返回指定集合中指定元素的出现次数 |
void copy(List dest,List src) | 将src中的内容复制到dest中 |
boolean replaceAll (List list,Object oldVal,Object newVal) | 使用新值替换 List 对象的所有旧值 |