学习目标:
掌握Java集合框架包含的内容
掌握ArrayList和LinkedList的使用
掌握HashSet的使用
掌握增强型for循环的用法
学习内容:
1.前引
程序场景
分析1:分析以上问题,发现数组在存储对象数据时存在一些明显的缺陷:
1:数组长度固定不变,不能很好地适应元素数量动态变化的情况。
2:通过数组名.length获取数组的长度,却无法直接获取数组中实际存储的元素个数。
3:数组采用在内存中分配连续空间的方式存储,根据元素信息查找时效率比较低,需要多次比较。
分析2:针对数组的缺陷,Java提供了比数组更灵活、更实用的集合框架,可大大提高软件的开发效率,并且不同的集合可适用于不同的应用场合。
分析3:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java的集合框架
2.Java集合框架包含的内容
Java集合框架包含的内容2-1
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
Java集合框架包含的内容2-2
3.Collection接口
List接口3-1
List分为ArrayList和LinkList两种
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
LinkedList采用链表存储方式。插入、删除元素时效率比较高
LinkedList存储的是本元素的内容和下一个元素的地址
List接口3-2
List接口的常用方法(不是所有的方法)
方法名 | 说 明 |
boolean add(Object o) | 在列表的末尾顺序添加元素, 起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。 索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素, 起始索引位置从0开始 |
4.ArrayList集合类
确定存储方式
ArrayList类是List接口的一个具体实现类
ArrayList对象实现了可变大小的数组
随机访问和遍历元素时,它提供更好的性能
ArrayList的方法
方法名 | 说明 |
对象名.remove(下标) | 删除指定的元素 |
if(对象名.contains(元素名)) | 判断是否包含指定元素 |
对象名.getFirst() | 获取第一个元素的具体信息 |
对象名.getLast(); | 获取最后一个元素的具体信息 |
5.LinkedList集合类
LinkedList的特殊方法
方法名 | 说 明 |
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
6.ArrayList与LinkedList对比
ArrayList | LinkedList | |
存储方式的区别 | ArrayList实现了长度可变的数组,在内存中分配连续的空间。 | LinkedList采用链式存储方式 |
使用场合的区别 | ArrayList遍历元素和随机访问元素的效率比较高,插入,删除,修改操作频繁时性能低下 | LinkedList插入,修改,删除时效率较高,查找效率较低 |
7.Set接口
Set接口分为两大类HashSet,TreeSet
Set 接口存储一组唯一,无序的对象
Set 接口常用的实现类:HashSet
HashSet 集合的特点
集合内的元素是无序排列且不允许重复。
HashSet集合的查找效率高。
允许集合元素值为null。
方法名 | 说明 |
boolean add(Object o) | 如果Set中尚未包含指定元素o,则添加元素o |
void clear(int index,Object o) | 从Set中移除所有元素 |
int size() | 返回Set中的元素个数 |
boolean isEmpty() | 如果Set不包含任何元素,则返回true |
boolean contains(Object o) | 如果set包含指定元素o,则返回true |
boolean remove(Object o) | 如果Set包含指定元素o,则将其移除。 |
8.HashSet集合类
HashSet集合类不存在get方法
如何遍历Set集合呢?
方式1:使用增强型for循环 方式2:通过迭代器Iterator实现遍历
语法
for(元素类型t 元素变量x:数组或集合对象){
引用了x的java语句
}
实例
// 1、创建四个狗狗对象
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
// 2、创建HashSet集合对象并把四个狗狗对象放入其中
Set dogs = new HashSet();
dogs.add(ououDog);
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(feifeiDog);
// 3、使用for增强语法遍历HashSet
for (Object obj : dogs) {
Dog dog=(Dog)obj;
System.out.println(dog.getName()+"\t"+dog.getStrain());
}
方式2:通过迭代器Iterator实现遍历
实例
// 1、创建四个狗狗对象
// 省略创建狗狗对象的代码
// 2、创建HashSet集合对象并把四个狗狗对象放入其中
Set dogs = new HashSet();
dogs.add(ououDog);
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(feifeiDog);
// 3、使用iterator()获取Iterator对象
Iterator iterator = dogs.iterator();
// 4、使用Iterator遍历集合
while (iterator.hasNext()) {
Dog dog = (Dog) iterator.next();
System.out.println(dog.getName() + "\t" + dog.getStrain());
}