Collection集合的常用方法
boolean add(E e) 向集合中添加元素
boolean remove(E e) 将元素从集合中删除
void clear() 清空集合所有的元素
boolean contains(E e) 判断集合中是否包含指定的元素
boolean isEmpty() 判断集合是否为空
int size() 获取集合的长度
遍历Collection集合的重要步骤
1.通过集合对象获取迭代器对象
2.使用循环和hasNext()方法来控制是否还有元素
3.循环内通过next()方法获取元素
Collection集合存储学生对象并遍历的重要步骤
1.定义一个学生类,包含姓名和年龄两个属性
2.创建Collection集合对象,泛型为学生对象类型
3.创建几个学生对象,并存储到集合中
4.通过迭代器遍历集合
List集合的概述和特点
1.List集合是单列集合体系之一
2.List集合及其实现类全部有索引
3.List集合及其实现类全部可以存储重复元素
4.List集合及其实现类全部元素存取有序
List集合特有的方法
void add(int index,E e) 向集合中指定索引位置添加元素
E remove(int index) 删除指定索引处的元素并返回
E set(int index,E e) 修改指定索引处的元素,返回被修改的元素
E get(int index) 获取指定索引处的元素
List集合存储学生对象并遍历重要步骤
1.定义学生类,包含姓名和年龄两个属性
2.创建List集合对象,泛型为学生对象类型
3.创建几个学生对象,并存入集合中
4.使用迭代器和for循环两种方式遍历集合
并发修改异常出现的原因
在迭代器遍历集合过程中,通过集合的自身方法对集合进行了操作。
导致了迭代器预期次数和实际次数不一致,就会出现并发修改异常
并发修改异常解决的方式
可以使用普通for循环来遍历集合,再对集合进行修改
List集合特有的迭代器
1.通过集合对象的listiterator()方法获取一个ListIterator迭代器对象
2.通过调用hasNext()方法判断是否有下一个元素
3.通过调用next()方法获取元素
4.可以通过ListIterator迭代器中的方法对集合进行操作
增强for循环定义格式
for(元素数据类型 变量名 : 数组/集合对象) {
循环体;
}
List集合存储学生对象三种遍历方式重要步骤
1.定义一个学生类,包含姓名和年龄两个属性
2.创建一个List集合对象,泛型为学生对象类型
3.创建三个学生对象,并添加到集合中
4.使用迭代器遍历集合
5.使用普通for循环遍历集合
6.使用增强for循环遍历集合
栈结构
数据先进后出模型
队列结构
数据先进先出模型
数组结构
特点:查询快、增删慢
链表结构
特点:查询慢、增删快
List集合实现类的特点
ArrayList集合:底层是数组实现,查询快、增删慢
LinkedList集合:底层是链表实现,查询慢、增删快
ArrayList集合存储学生对象三种方式遍历重点步骤
1.定义一个学生类,包含姓名和年龄两个属性
2.创建一个ArrayList集合对象,泛型为学生对象类型
3.创建三个学生对象,并添加到集合中
4.使用迭代器遍历集合
5.使用普通for循环遍历集合
6.使用增强for循环遍历集合
LinkedList集合的特有功能
void addFirst(E e) 向集合中第一个位置添加元素
void addLast(E e) 向集合中最后一个位置添加元素
E getFirst() 获取集合中第一个元素
E getLast() 获取集合中最后一个元素
E removeFirst() 删除集合中第一个元素
E removeLast() 删除集合中最后一个元素
Collection常用方法有哪些 add() remove() clear() contains() isEmpty() size()
List集合的特点是 有索引、元素可以重复、元素存取有序
List集合特有方法有哪些 add(int index,E e) remove(int index) set(int index,E e) get(int index)
ArrayList集合的特点是 底层是数组实现,查询快、增删慢
LinkedList集合的特点是 底层是链表实现,查询慢、增删快
--------------------------------------------------------------------------------------------------------------
Set集合的特点
1.元素存取无序
2.没有索引
3.不能存储重复元素
什么是哈希值
是JDK根据对象的地址或字符串或数字计算出来的一串int类型的数值
如何获取哈希值
Object类中有一个方法:hashCode()用于获取哈希值
HashSet集合的特点
1.底层是哈希表结构
2.元素存取无序
3.没有索引
4.不能存储重复元素
HashSet集合保证元素唯一性的原理
1.根据对象的哈希值计算存储位置
如果当前位置没有元素则直接存入
如果当前位置有元素存在,则进入第二步
2.当前元素的元素和已经存在的元素比较哈希值
如果哈希值不同,则将当前元素进行存储
如果哈希值相同,则进入第三步
3.通过equals()方法比较两个元素的内容
如果内容不相同,则将当前元素进行存储
如果内容相同,则不存储当前元素
HashSet集合存储学生对象并遍历的重要步骤
1.定义一个学生类
包含姓名和年龄两个属性
并重写hashCode()和equals()方法
2.创建HashSet集合对象,泛型为学生对象类型
3.创建几个学生对象,并存储到集合中
4.通过增强for循环遍历集合
LinkedHashSet集合的概述和特点
1.LinkedHashSet集合是HashSet集合的子类
2.LinkedHashSet集合不能存储重复元素
3.LinkedHashSet集合可以保证元素存取有序
TreeSet集合的特点
1.元素有序。元素可以按照一定规则进行排序。具体要取决于构造方法
TreeSet():根据元素的自然顺序进行排序
TreeSet(Comparator c):根据指定的比较器进行排序
2.TreeSet集合没有索引。只能通过迭代器、增强for循环进行遍历
3.TreeSet集合不能存储重复元素
使用自然排序Comparable的重要步骤
1.定义学生类
包含姓名和年龄两个属性
实现Comparable接口,重写compareTo()方法
主要条件:年龄升序
次要条件:姓名字母顺序
2.创建TreeSet集合对象,泛型为学生对象类型
3.创建几个学生对象,并存入集合中
4.使用增强for循环遍历集合
使用比较器接口Comparator排序的重要步骤
1.定义学生类,包含姓名和年龄两个属性
2.创建TreeSet集合对象,泛型为学生对象类型
3.在TreeSet集合构造方法中,使用匿名内部类方式传递Comparator接口,重写compare()方法。主要排序条件:年龄升序,次要排序条件:姓名字母顺序
4.创建几个学生对象,并添加到集合中
5.使用增强for循环遍历集合
成绩排序案例的主要步骤
1.定义一个学生类,包含姓名、语文成绩、数学成绩三个变量
提供一个获取总成绩的方法
2.创建TreeSet集合对象,泛型为学生对象类型
3.在TreeSet构造方法中,使用匿名内部类传递Comparator接口,重写compare()方法。主要条件:总分降序,次要条件:语文成绩和姓名
4.创建几个学生对象,并添加到集合中
5.通过增强for循环遍历集合
不重复随机数案例的主要步骤
1.创建一个TreeSet集合对象,泛型为Integer类型
2.创建Random对象,用于生成随机数
3.使用while循环判断集合长度是否不等于10
如果长度不为10,则生成随机数保存到集合中
4.使用增强for循环遍历集合
什么是泛型
泛型指的是广泛的数据类型,就是将原来具体的类型参数化,在使用的时候再传入具体的类型!
泛型的好处
将运行时期的错误提前到了编译期间
省去了类型转换的麻烦
泛型类的定义
[AppleScript] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important][color=white !important]
?
| public class Generic<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
|
泛型类的使用
[AppleScript] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important][color=white !important]
?
| Generic<String> g1 = new Generic<String>();
g1.setT("林青霞");
System.out.println(g1.getT());
Generic<Integer> g2 = new Generic<Integer>();
g2.setT(30);
System.out.println(g2.getT());
|
泛型方法的定义
[AppleScript] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important][color=white !important]
?
| public class Generic {
public <T> void show(T t) {
System.out.println(t);
}
}
|
泛型方法的使用
[AppleScript] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important][color=white !important]
?
| Generic g = new Generic();
g.show("林青霞");
g.show(30);
g.show(true);
g.show(12.34);
|
泛型接口的定义
[AppleScript] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important][color=white !important]
?
| public interface Generic<T> {
void show(T t);
}
public class GenericImpl<T> implements Generic<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
|
泛型接口的使用
[AppleScript] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important][color=white !important]
?
| Generic<String> g1 = new GenericImpl<String>();
g1.show("林青霞");
Generic<Integer> g2 = new GenericImpl<Integer>();
g2.show(30);
|
类型通配符<?>
List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型
这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
类型通配符向上限定<? extends 类型>
List<? extends Number>:它表示的类型是Number或者其子类型
类型通配符向下限定<? super 类型>
List<? super Number>:它表示的类型是Number或者其父类型
什么是可变参数
可变参数又称为参数个数可变,用于方法的形式参数使用。
可变参数的注意事项
可变参数其实是一个数组
如果一个方法有多个参数,而且包含可变参数。可变参数要放在最后
JDK中提供的类使用可变参数的方法
Arrays工具类中有一个静态方法:
public static <T> List<T> asList(T... a):返回由指定数组支持的固定大小的列表
List接口中有一个静态方法:
public static <E> List<E> of(E... elements):返回包含任意数量元素的不可变列表
Set接口中有一个静态方法:
public static <E> Set<E> of(E... elements) :返回一个包含任意数量元素的不可变集合
Set集合的特点有哪些 无索引、元素不能重复、元素存取无序
HashSet集合保证元素唯一依赖哪两个方法 hashCode()和equals()方法
LinkedHashSet集合的特点是 保证元素存取顺序
自然排序使用的接口和方法是 Comparable接口中的compareTo()方法
比较器排序使用的接口和方法是 Comparator接口中的compare()方法
--------------------------------------------------------------------------------------------------------------
Map集合的特点
1.键值对映射关系
2.一个键对应一个值
3.键不能重复
4.元素存取无序
Map集合的常用方法
V put(K k,V v) 向集合中添加一对元素
V remove(K k) 根据键删除键值对元素
void clear() 清空集合
boolean containsKey(K k) 判断集合中是否包含指定的键
boolean containsValue(V v) 判断集合中是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 获取集合的长度
Map集合常用的获取方法
V get(K k) 根据键获取值
Set<K> keyset() 获取所有的键,保存到Set集合中
Collection<V> values() 获取所有的值,保存到Collection集合中
Set<Map.Entry<K,V>> entrySet() 获取所有键值对,封装成Entry对象
Map集合的第一种遍历方式重点步骤
1.通过keySet()方法获取所有键的集合
2.遍历键的集合,拿到每一个键
3.通过get()方法,通过键获取值
Map集合的第二种遍历方式重点步骤
1.获取所有键值对对象的集合,使用entrySet()实现
2.遍历键值对对象集合,拿到每一个键值对对象
3.调用键值对对象中的getKey()和getValue()方法获取键和值
HashMap集合练习之键是String类型值是Student类型的重要步骤
1.定义一个学生类,包含姓名和年龄两个属性
2.创建HashMap集合对象,泛型为<String,Student>
3.创建几个学生对象,并将学号和学生对象存储到集合中
4.通过两种方式遍历集合
HashMap集合练习之键是Student类型值是String类型的重要步骤
1.定义一个学生类
包含姓名和年龄两个属性
并重写hashCode()和equals()两个方法
2.创建HashMap集合对象,泛型为<Student,String>
3.创建几个学生对象,并将学生对象和居住地存储到集合中
4.遍历集合
ArrayList集合嵌套HashMap集合的主要步骤
1.创建一个ArrayList集合对象,泛型为HashMap<String,String>
2.创建三个HashMap集合,泛型都为String类型
3.向这三个HashMap集合中添加一些数据
4.将这三个HashMap集合添加到ArrayList集合中
5.遍历ArrayList集合,拿到HashMap集合,再遍历HashMap集合
HashMap集合嵌套ArrayList集合的主要步骤
1.创建一个HashMap集合,泛型为<String,ArrayList<String>>
2.创建三个ArrayList集合对象,并存储一些元素
3.将键和三个ArrayList集合对象添加到HashMap集合中
4.遍历HashMap集合,获取键和ArrayList集合,再遍历Ar