集合框架
Java 基础(任何语言都要学习类似的阶段)
- 语法入门
- 面向对象
- 高级特性(高级API)
API:应用程序接口
- Scanner、Arrays:都属于应用程序接口,它们是 Java 官方团队开发的,方便我们进行一些操作。
- HTTP型的 API:百度地图,天气类接口…
集合框架
实用类
IO流
多线程
网络编程
XML
基本的C/S架构程序
回顾数据存储方式
-
变量:用于存储单一的数据
-
数组:用于存储一组连续的相同数据类型的数据
- 长度不能改变
- 可变数组:自己定义类,定义方法,实现数组自动扩容
- 集合:官方定义的
- 数据类型必须是相同的
- 吃货联盟:解决思路,直接定义多个数组,每个数组的相同下标表示一个完整的数据实体。
- 对象
- 对象:可以存储一组完整的实体数据,例如:学生对象,姓名,年龄…
- 对象数组:Student[]、Pet[]、MotorVehicle[]…
- 集合
1. 集合框架体系结构
Java 集合框架提供了一套性能优良、使用方便的接口和类,它们位于 java.util 包中。
lterable
- Collection:无序,可重复的数据
- List:可重复、有序
- ArrayList:数组
- LinkedList:链表
- Set:无序、不可重复(唯一)
- HashSet
- SortedSet
- TreeSet
- List:可重复、有序
Map:无序、键值对数据(key-value)
- HashMap
- HashTable
- Properties
2. List集合的使用
2.1 ArrayList
构造方法:
- 无参构造:ArrayList<泛型>()
普通方法:
普通方法:
-
add(泛型类型) : boolean 向后追加数据
-
add(int, 泛型类型) : void 向指定索引添加数据
-
size() : int 获取集合中存储的数据条数
-
get(int) : 泛型类型 获取集合中指定索引的数据
-
contains(泛型类型) : boolean 判断集合中是否包含指定数据
-
remove(int) : 泛型类型 删除指定索引的数据
// 如果删除数值类型数据,推荐用 remove(索引) -
remove(泛型类型) : boolean 删除指定的数据
// 如果删除非数值类型数据,推荐用 remove(数据)
-
isEmpty() : boolean 判断集合是否为空
-
clear() : boolean 清空集合
-
toArray() : Object 将集合转换为Object类型数组
-
toArray(泛型类型[]) : 泛型类型[] 将集合转换为指定类型的数组
Character[] array = list.toArray(new Character[] {});
-
set(int, 泛型类型) : 泛型类型 修改指定索引的数据
遍历
-
遍历下标
for (int i = 0; i < list.size(); i++) { News news = list.get(i); System.out.println(news.getName()); }
-
增强for循环
for (News news : list) { System.out.println(news.getName()); }
2.2 LinkeedList
构造方法:
- 无参构造:LinkedList<泛型类型>()
普通方法:
- addFirst(泛型类型) : void
- addLast(泛型类型) : void
- getFirst() : 泛型类型
- getLast() : 泛型类型
- removeFist() : 泛型类型
- removeLast() : 泛型类型
- …其他方法与ArrayList相同,因为它们两个都是实现自 List 接口。
遍历方式同 ArrayList。
2.3 ArrayList和LinkedList区别[面试题]
ArrayList和LinkedList,它们都是实现自 List 接口,所以它们数据存储的特点是有序且可重复。
ArrayList底层数据结构是数组,因为本质是数组,所以在增删数据可能要创建新的数组对象,效率较低,但是因为数组有索引,所以查询效率较高。
LinkedList底层数据结构是链表,因为本质是链表,所以在增删数据时只需要切换指针指向的节点就可以,尤其是首尾增删,效率较高。但是因为链表没有索引,所以除了首尾查询外其他效率较低。
LinkedList 没有索引,那遍历怎么可以通过索引遍历呢?
的确,按理说如此。
可以想象一下在教室内,每个学生座位都有编号,这就是有索引的情况。(数组)
每个学生座位没有编号,每次找指定编号学生时,都要计算一次。(链表)
3. Set集合的使用
无序,不可重复。
3.1 HashSet
构造方法:
- HashSet<泛型类型>()
普通方法:
- add(泛型类型) : boolean
- remove(泛型类型) : boolean
- size() : int
- contains(泛型类型) : boolean
- …除了一些和索引有关的,大多数也和List接口方法一致,因为Set和List接口都继承自Collection接口
遍历
- 增强for
- 迭代器
- Lambda
以上三种,List接口也可以用。