集合
(1) 集合的特点 (2) 集合的功能方法(体现集合具有什么功能) (3) 集合的实现类 (4) 集合的遍历
4. 集合分类: (1) 集合的特点 (2) 集合的功能方法(体现集合具有什么功能) (3) 集合的实现类 (4) 集合的遍历
Java中的集合体系分为两大类:Collection+Map
(1) Collection集合: List集合 Set集合
(2) Map集合
二、Collection集合体系 1. 父接口:Collection
(1) 特点:存储多个对象(Object) (2) 功能方法: a. boolean add(Object obj):将对象obj添加到集合容器中,添加成功,返回true,添加失败-false 【重点】 b. int size():获取集合中对象的个数 c. boolean contains(Object o):判断当前集合中是否包含o对象,包含-true,不包含-false d. boolean isEmpty():判断当前集合是否为空 e. boolean remove(Object obj):将对象obj从当前集合中移除 f. void clear():清除当前集合 (3) 实现类:没有直接实现类,见子接口 (4) 遍历:详见子接口
2. 子接口:List
(1) 特点:存储多个对象,有序、有下标、元素可以重复(下标范围:0~size-1)
(2) 功能方法:部分方法继承于 父接口Collection,另一部分方法为List独有方法 注意:List下标从0开始,范围是:0~size-1 a. Object get(int index):根据下标获取对应的元素 但是如果给定下标超过有效范围,则运行报错,错误信息为:java.lang.IndexOutOfBoundsException(下标越界) b. Object remove(int index):根据下标删除对应元素,被删除的对象作为返回值返回 c. Object set(int index,Object newObj):将指定下标的元素进行替换,被替换的对象作为返回值进行返回
(3) 实现类:ArrayList
(4) 集合的遍历:
a. 下标遍历: for(int i=0;i<集合名.size();i++){ // 通过下标获取对应的元素 System.out.println(集合名.get(i)); }
b. forEach遍历:【开发重点】
for(数据类型 变量名:集合的名字){ // 通过变量名操作集合数据 } 注意:()中的数据类型取决于集合的泛型
(5) 泛型集合: 【开发重点】
a. 理解:泛型集合安全性的集合,强制要求集合中数据类型统一,方便管理
b. 语法: ArrayList<数据类型> 集合名= new ArrayList<数据类型>(); 注意:前后<>中的数据类型需要统一
c. 注意:基本数据类型需要使用对应包装类型作为泛型类型
(6) List集合接口的实现的区别:【面试内容】 a. ArrayList:底层数组实现,查询快,增删相对较慢 jdk1.2版本,线程不安全,并发效率相对快 b. Vector:底层数组实现,查询快,增删相对较慢 jdk1.0版本,线程安全,并发效率相对低 c. LinkedList:底层使用链表实现,查询效率相对低,增删效率相对较高
补充:数据结构的两种常见存储结构:数组+链表 数组:元素之间的内存空间连续,空间利用率相对较低,方便内存管理 链表:元素之间的内容空间不连续,空间利用率相对较高 3. 子接口:Set
(1) 特点:存储多个对象,无序、无下标、元素内容不可以重复
(2) 功能方法:方法继承于 父接口Collection
(3) 实现类:HashSet 如果保证自定义类型的对象存储在HashSet集合中,元素内容不重复,需要存储的对象对应的类覆盖 hashCode方法和equals方法
(4) 遍历方式:forEach遍历
(5) LinkedHashSet:是HashSet的子类,也是Set接口的实现类,没有下标、元素内容不允许重复,根据元素添加顺序进行存储 如果保证自定义类型的对象存储在LinkedHashSet集合中,元素内容不重复,也是需要存储的对象对应的类覆盖 hashCode方法和equals方法
三、Map集合体系 1. Map集合的特点(Map是一个接口) 【基础重点】
(1) 存储键值对(key-value),一个键对应一个值
(2) 键:key,无序、无下标、元素不可以重复(唯一性)
(3) 值:value,无序、无下标、元素可以重复
2. 常见方法:
(1) V put(K key,V value):往Map集合中添加键值对,如果添加的key在当前map中不存在,则直接将键值对添加即可;如果添加的key在map集合中已经存在,则用新的value替换原来的value,被替换的value作为返回值返回 【重点】 put作用有以下两个功能: a. 添加 b. 修改:利用key修改对应value (2) int size():获取map集合中键值对个数 (3) V get(K key):根据指定的key获取对应的value值 【重点】 (4) boolean containsKey(K key):判断当前集合中是否包含某个键 (5) boolean containsValue(V value):判断当前集合中是否包含某个值 (6) V remove(K key):根据键删除对应的键值对
3. 遍历方式:
(1) 键遍历:通过 keySet方法获取所有的键
a. 从map集合中获取所有的键: Set<K> keys=map.keySet();
b. 遍历Set集合获取每一个键: for( K key:keys ){
// 通过键获取对应值 V value = map.get(key); // 通过 key和value操作键值 }
(2) 键值对:通过 entrySet获取所有的键值对
a. 从map集合中获取所有的键值对:Entry<K,V> Set<Map.Entry<K,V>> kvs= map.entrySet();
b. 遍历Set集合获取每一个键值对: for(Map.Entry<K,V> kv:kvs){
// 获取键 K key = map.getKey(); // 获取值 V value = map.getValue(); // 通过 key和value操作键和值 }
4. Map集合的其他实现的区别
(1) HashMap:jdk1.2版本,线程不安全,并发效率高,允许null作为key/value
(2) LinkedHashMap:是HashMap的子类,按照键添加的顺序进行存储
(3) Hashtable:jdk1.0版本,线程安全,并发效率相对较低,不允许null作为key/value
(4) Properties:是Hashtable的子类,也是Map的实现类,key和value默认为String类,通常用于加载配置文件 Properties pro = new Properties();// 是Map的实现类