一、集合
1. 概念:一种操作便利的对象容器,存储多个对象,多数情况下可代替数组。
2. 位置:所有集合的接口和相关实现类都是位于java.util 包中
3. 每一种集合的学习都是从一下方面学习:
集合接口的特点
集合接口中方法
集合接口对应的实现类
集合的遍历方式
4. 集合分类
collection
List
Set
Map集合
二、Collection集合体系
1. 父接口:Collection接口
(1)Collection接口中的特点:存储对象,即存储数据类型object
(2)Collection接口中方法:
boolean add(object obj):添加一个对象。【重点】
int size():返回此集合中的所有对象。
coid clear():清空此集合中的所有对象
boolean contains(Object o):检查此集合中是否包含o对象
boolean isEmpty():判断此集合是否为空
boolean remove(object o):在此集合中移除o对象
Object [ ] toArray():将此集合转换成数组
(3)实现类:详见子接口
(4)遍历 :详见子接口
2. 子接口:LIst
(1)LIst接口的特点:存储object类型的对象,有序、有下标,元素可以重复
List下标范围是:0 - 集合元素个数-1(即 0 - size - 1)
(2)常见方法:
boolean add(Object obj) :添加一个对象。 【重点】
object get(int index) // 返回集合中指定位置元素
void add(int index,object o) // 在index位置插入对象
boolean addAll(int index,Collection c) :将c中元素一次性插入到集合中指定下标
Objcet remove(int index,Object element) // 替换index位置上的元素
List subList(int fromIndex, int toIndex) // 返回集合中指定部分的元素(3)实现类:ArrayList
(4)遍历:
a. 下标遍历:
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
b. forEach遍历:
for(数据类型 变量名:集合名){
/ / 可以通过变量名操作集合数据
}
(5)泛型集合:强制要求集合中数据类型同意
ArrayList<数据类型> list=new ArrayList<数据类型>();
a. 前后数据类型一致
b. 基本数据类型的泛型需要使用对应的包装类
(6)不同实现类的区别:
ArrayLIst:
底层用数据组实现,查询快,增删慢
JDK1.2提供,线程不安全,并发效率高
Vector:
底层用数据组实现,查询快,增删慢
JDK1.0提供,线程安全,并发效率低
LinkedList:
底层用链表实现,查询慢,增删快
JDK1.2提供,线程不安全,并发效率快
3. 子接口:Set
(1)Set接口的特点:用于存放任意object对象,无序、无下标、元素不能重复(元素内容不能重复)
(2)方法:全部继承于 父接口 Collection
(3)实现类:HashSet
注意:为保证存储在HashSet集合中对象内容不同,需要覆盖hashCode和equals方法的
(4)遍历方式:forEach
(5)实现类:LinkedHashSet:按照元素添加的顺序进行,无下标、元素不可以重复(和HashSet一致)
三、Map集合体系
1. 特点:存储键值对(key-value),键:无序、无下标、元素不可以重复;值:无序、无下标、元素可以重复
2. 方法:
V put(K key,V value):往Map中存储一个键值对。如果key在map中已经存在,则新值覆盖旧值;如果key在map中不存在,则直接存储返回值为null。
V remove(K key):根据键删除集合中对应的键值对,返回被删除的value。
int size():获取集合中键值对的数量
boolean containsKey(K key):判断map集合中是否包含key的键,返回true/false
boolean containsValue(K Value):判断map集合中是否包含value的值。
3. 实现类:HashMap
4. 遍历:
(1)键遍历:
Set<String> key=stus.keySet(); // 获取所有的键
// 通过遍历set集合获取每一个键
for(String key:keys){
Student stu=stus.get(key); // 通过键获取对应的值
}
(2)值遍历:
Collection<Student> cs=stus.values(); // 获取所有的值
// 通过遍历获取 集合中每个值
for(Student stu:cs){
System.out.println(stu);
}
(3)键值对遍历:
Set<Map.Entry<String,Student>> kvs=stus.entrySet(); // 获取所有键值对
// 获取每个键值对
for(Map.Entry<String,Student> kv:kvs){
// 通过操作Entry获取对应的 键和值
String s1=kv.getkey();
Student stu=kv.getvalue();
System.out.println(s1+"-----"+stu);
}
5. 不同实现类:
(1)HashMap:JDK1.2版本,线程不安全,运行效率快;允许用null作为key或是vaule
(2)Hashtable:JDK1.0版本,线程安全,并发效率慢;不允许null作为key或是value
(3)LinkedHashMap:HashMap的子类,按照元素添加的顺序进行存储
(4)Properties:Hashtable的子类,要求key和value都是String。通常适用于配置文件的读取
(5)TreeMap:实现了SortedMap接口(是Map的子接口),可以对key自动排序