1.Collection
1.1.集合的特点
提供一种存储空间可变的存储模型,存儲的数据容量可以时发生改变
1.2.结构
1.3.Collection集合概述和使用
单列接口,不能直接实现,用子接口(Set和List)实现
1.4.Collection集合的常用方法
1.5.Collection集合的遍历
1.Itertor:迭代器
Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的 iterator( )方法得到
2.Itertor迭代器while循环改进
2.List
2.1.List集合概述和特点
概述
有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。
用户可以通过整数索引访问元素, 并搜索列表中的元素 与Set集合不同,列表通常允许重复的元素
特点:
有序:存储和取出的元素顺序一致
可重复:存储的元素可以重复
2.2.List集合的特有方法
特有方法:
for循环改进遍历:
2.3.列表迭代器
常用方法:
代码演示:
与Collection迭代器差不多
2.4.List集合子类特点
1.区别
ArrayList:底层数据结构是数组(查询快,增删慢)
LinkedList:底层数据结构是链表(查询慢,增删快)
2.LinkedList集合特有功能
3.Set
3.1.Set集合概述和特点
1.元素存取无序
2.没有索引,不能用普通for循环进行遍历操作
3.不能存储重复元素
3.2.哈希值
定义:
是JDK根据对象的地址或字符串或数字计算出来的一串int类型的数值
如何得到哈希值:
如何得到哈希值:hashcode( )
例子:
重写实现不同对象的哈希值相同
3.3.HashSet集合概述和特点
特点:
●底层数据结构是哈希表
●对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序—致
●没有带索引的方法,所以不能使用普通for循环遍历
●由于是Set集合,所以是不包含重复元素的集合
遍历:
3.4.哈希表
●JDK8之前,底层采用数组+链表实现,可以说是一个元素为链表的数组
●DK8以后,在长度比较长的时候,底层实现了优化
案例:HashSet遍历
重写:hashCode和equals方法
3.5.LinkedHashSet集合和特点
概述:
哈希表和链表实现的set接口,具有可预测的迭代次序(存储和迭代数据的次数一致)
集合特点:
1.哈希表和链表实现的Se接口,具有可预测的迭代次序(链表)
2.由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
3.由哈希表保证元素唯一,也就是说没有重复的元素
遍历(增强for)
3.6.TreeSet集合概述和特点
概述:
是一个有序的集合,它的作用是提供有序的Set集合
特点:
1.元素有序,这里的顺序不是指存储和取出的顺序,而是按照指定的规则进行排序,具体排序方式取决于构造方法
TreeSet( ):根据其元素的自然排序进行排序 TreeSet( comparator comparato):根据指定的比较器进行排序
2.没有带索引的方法,所以不能使用普通for循环遍历
3.由于是Set集合,所以不包含重复元素的集合
3.7.自然排序Comparable的使用
过程:
1.存储学生对象并遍历,创建 TreeSe堞集合使用无参构造方法
2.要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
3.8.比较器排序 Comparator的使用
package Demo;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo6 {
public static void main(String[] args) {
TreeSet<Student> students=new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num = s1.getAge() - s2.getAge();
int num2=num==0?s1.getName().compareTo(s2.getName()):num;
return num2;
}
});
//创建学生对象
Student s1=new Student(29,"xishi");
Student s2=new Student(28,"wangzhaojun");
Student s3=new Student(33,"yangyuhuan");
Student s4=new Student(33,"linqingxia");
Student s5=new Student(33,"linqingxia");
students.add(s1);
students.add(s2);
students.add(s3);
students.add(s4);
students.add(s5);
for (Student s:students){
System.out.println(s.getAge()+","+s.getName());
}
}
}
class Student{
private int age;
private String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.泛型
4.1.泛型概述:
好处:
1.把运行时期的问题提前到了编译期间
2.避免了强制类型转换
4.2.泛型类
格式:修饰符cass类名<类型>{ } 范例: public class Generic<T>{ }
此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
4.3.泛型方法
4.4.类通配符
4.5.可变参数
4.6.可变参数的使用
5.Map
5.1.Map集合的概述和使用
概述
Interface Map<K,V> K:键的类型;V:值的类型
将键映射到值的对象;不能包含重复的键;每个键可以映射到最多—个值
5.2.Map集合的基本功能
5.3.Map集合的获取方法
5.4.Map集合遍历