集合框架
迭代(Iterator)
在Java中,有很多的数据容器,对于这些的操作有很多的共性。Java采用了迭代器来为各种容器提供了公共的操作接口。这样使得对容器的遍历操作与其具体的底层实现相隔离,达到解耦的效果。
方法 | 作用 |
---|---|
hasNext() | 判断是否还有下一个元素可以迭代,返回true或false |
next() | 返回迭代的下一个元素 |
remove() | 移除当前迭代返回的元素(可选,非必须) |
List <String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
// 1.使用for循环判断是否还有迭代元素
for(Itrator<String> it1 = list.iterator();it1.hasNext();){
//若还有迭代元素,则对迭代当前返回的元素进行操作
it1.next();
}
// 2.使用while循环进行迭代
Itrator<String> it2 = list.iterator();
while(it2.hasNext){
//对迭代当前返回的元素进行操作
it2.next();
}
Iterator只提供了删除元素的方法remove,如果我们想要在遍历的时候添加元素就要使用ListIterator了, ListIterator接口继承了Iterator接口,它允许程序员按照任一方向(Iterator只能做到正向遍历,而ListIterator正反向遍历都可以做到)遍历列表,迭代期间修改列表,并获得迭代器在列表中的当前位置。
集合的概念
- 概念:对象的容器,定义了对多个对象进行操作的常用方法,可实现数组的功能
- 和数组的区别:
- 数组长度固定,集合长度不固定
- 数组可以存储基本类型和引用类型,集合只能存储引用类型(想要存储基本类型可以使用装箱)
- 数组长度固定,集合长度不固定
- 位置:java.util.*;
Collection接口
-
特点:代表一组任意类型的对象,无序,无下标,不能重复
-
方法:
方法 | 作用 |
---|---|
boolean add(Object obj) | 添加一个对象(obj) |
boolean addAll(Collection c) | 将一个集合中的所有对象添加到此集合中 |
void clear() | 清空此集合中的所有对象 |
boolean contains(Object obj) | 检查此集合中是否包含obj对象 |
boolean equals(Object obj) | 比较此集合是否与指定对象(obj)相等 |
boolean isEmpty() | 判断此集合是否为空 |
boolean remove(Object obj) | 在此集合中移除obj对象 |
int size() | 返回此集合中的元素个数 |
Object[] toArray() | 将此集合转换成数组 |
List接口与实现类
List接口
- 特点:有序,有下标,元素可重复
- 方法:
方法 | 作用 |
---|---|
void add(int index, Object o) | 在index位置插入对象o |
boolean addAll(int index, Collection c) | 将一个集合中的元素添加到此集合中的index位置 |
Object get(int index) | 返回集合中指定位置的元素 |
List subList(int fromIndex. int toIndex) | 返回fromIndex和toIndex之间的集合元素 |
List实现类
- ArrayList:
- 数组结构实现,查询快,增删慢
- JDK1.2版本,运行效率快,线程不安全
- Vector:
- 数组结构实现,查询快,增删慢
- JDK1.0版本,运行效率慢,线程安全
- LinkedList:
- 链表结构实现,增删快,查询慢
ArrayList与LinkedList的区别:
ArrayList必须开辟连续空间,查询快,增删慢
LinkedList:无需开辟连续空间,查询慢,增删快
泛型和工具类
泛型
- Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递
- 常见形式有泛型类,泛型接口,泛型方法
- 语法:<T,…> T称为占位符,表示一种引用类型
- 好处:
- 提高代码的重用性
- 防止类型转换异常,提高代码的安全性
泛型集合
- 概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致
- 特点:
- 编译时即可检查,而非运行时抛出异常
- 访问时,不必类型转换(拆箱)
- 不同泛型之间引用不能相互赋值,泛型不存在多态
Set接口与实现类
Set接口
Set实现类
-
HashSet:
- 基于HashCode实现元素不重复
- 当存入元素的哈希码相同时,会调用equals进行确认,如果结果为true,则拒绝后者进入
-
TreeSet:
- 基于排列顺序实现元素不重复
- 实现了SortedSet接口,对集合元素自动排列
- 元素对象的类型必须实现Comparable接口,指定排序规则
- 通过CompareTo方法确定是否为重复元素
Map接口与实现类
Map接口的特点:
- 用于存储任意键值对(Key-Value)
- 键:无序,无下标,不允许重复
- 值:无序,无下标,允许重复
方法:
方法 | 作用 |
---|---|
V put(K key, V value) | 将对象存入到集合中,关联键值,key重复则覆盖原值 |
Object get(Object key) | 根据键获取对应的值 |
Set< K > | 返回所有key |
Collection< V > values() | 返回包含所有值的Collection集合 |
Set<Map.Entry<K,V>> | 键值匹配的Set集合 |
Map集合的实现类
-
Hashmap:
JDK1.2版本,线程不安全,运行效率快,允许使用null作为key或者value
-
Hashtable:
JDK1.0版本,线程安全运行效率慢,不允许null作为key或者value
-
Properties:
Hashtable的子类,要求key和value都是String,通常用于配置文件的读取
-
TreeMap:
实现了SortedMap接口(是Map的子接口),可以对key自动排序
Cloortions工具类
- 概念: 集合工具类,定义了除了存取意外的集合常用方法
- 方法:
方法 | 作用 |
---|---|
public static void reverse (List< T > list) | 反转集合中元素的顺序 |
public static void shuffle (List< T > list) | 随机重置集合元素的顺序 |
public static void sort (List< T > list) | 升序排序(元素类型必须实现Comparable接口) |