集合
本章目标
-
了解集合框架
-
重点掌握集合类的使用
-
掌握集合遍历
-
掌握集合泛型
-
掌握集合工具类的使用
什么是集合
我们需要各种不同类型的集合类来处理不同的数据
集合框架图
集合框架包含三种类型集合
-
List 集合:一种有序列表集合
-
Set 集合:一种无重复元素集合
-
Map 集合:一种键值对(key/value)集合
List 集合
List 接口方法
-
boolean add(E e):在末尾添加一个元素
-
boolean add(int index, E e):在指定索引添加一个元素
-
int remove(int index):删除指定索引元素
-
int remove(Object e):删除某个元素
-
E get(int index):获取指定索引的元素
-
int size():获取元素数量
ArrayList 类
ArrayList 类是 List 接口的一个实现类,它内部使用数组来存储所有元素,默认容量大小为 10(默认容量不足时扩容至原来的1.5 倍)
LinkedList 类
LindedList 类是 List 接口的一个实现类,它内部使用链表来存储所有元素、
链表是一种计算机数据结构,它的内部如同链条一样,每个元素都指向下一个元素
ArrayList 与 LinkedList 区别
Set 集合
Set 接口方法
-
boolean add(E e):添加某个元素
-
int remove(object e):删除某个元素
-
boolean contains(object e):判断是否包含指定元素
-
int size():获取元素个数
HashSet 与 TreeSet 区别
Map 集合
Map 集合是一种键值(key-value)映射表的数据结构,它能高效通过键(key)快速查找值(value)
注意:Map 中不存在重复的 key(如果放入相同的 key,会把原有的 key-value 对应的 value 替换掉)
Map 主要接口方法
-
V put(K key, V value):添加某个 key/value 元素
-
V remove(Object Key):删除某个 key/value 元素
-
V get(Object key):获取 key 对应的 value
-
int size():获取 key/value 元素数量
集合泛型
集合元素类型
集合框架中所有集合元素的类型都是 Object 类型(添加到集合中的任意元素都将自动强制转换为 Object 类型存放到集合中,从集合中获取任意元素其类型都是 Object 类型)
List list = new ArrayList(); list.add( 1 ); list.add( 2.2 ); list.add( true ); list.add(“abc”); int i = (int)list.get(0); double d = (double)list.get(1); boolean b = (boolean)list.get(2); String s = (String)list.get(3);
集合中保存的元素都是 Object 类型对象,获取集合元素也都是 Object 类型对象,必须对其进行强制类型转换
集合泛型
为了解决获取集合元素强制类型转换的麻烦,JDK1.5 中提供了一种新的处理方式 – 泛型
集合泛型就是在创建集合时可以指定集合保存的元素类型的一种处理集合的方式
List<String> list = new ArrayList<String>( );
集合遍历
集合遍历有三种方式,分别是 for 循环、for each 循环、iterator 迭代器
for 循环
for 循环只能用于遍历有序的 List 集合(或泛型),不能用于遍历无序的 Set 集合 和 Map 集合
List<String> list = new ArrayList<>(); list.add( “1” ); list.add( “2.3” ); list.add( “true” ); list.add(“abc”); for ( int index = 0; index < list.size(); ++index ) { String element = list.get( index ); }
for each 循环
for each 循环是在 JDK 1.5 中增加的一种新型循环,该循环大大简化了对于集合的遍历操作
for each 循环可用于遍历任何泛型集合框架(Map 集合遍历方式有所不同)
List 集合遍历如下:
List<String> list = new ArrayList<>(); list.add( “1” ); list.add( “2.3” ); list.add( “true” ); list.add(“abc”); for ( String str : list ) { String element = str; }
Map 集合遍历如下:
Map<String, String> map = new HashMap<>(); map.put(“张三”, “13541220873”); map.put(“李四”,“1372405730”); map.put(“王五”, “13940110923”) for ( Map.Entry<String, String> entry : map.entrySet() ) { String key = entry.getKey(); String value = entry.getValue(); }
iterator 迭代器
iterator 迭代器是 Java 中一种统一遍历集合的方式(所有集合都实现了 iterator 接口)
接口方法
-
next( ) 方法:返回下一个集合元
-
hasNext( ) 方法:返回是否还有下一个元素
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); // 获取 List 集合 iterator 迭代器对象 iterator<Integer> iterator = list.iterator(); // 遍历集合元素 while ( iterator.hasNext() ) { Integer element = iterator.next(); System.out.println(element); } Map<String,Integer> map = new HashMap<>( ); map.put("张三",23); map.put("李四",25); // 获取 Set 集合 iterator 迭代器对象 Set<String> set = map.keySet(); // key 集合 Iterator<String> iterator = set.iterator(); // 遍历 Set 集合元素 while ( iterator.hasNext() ) { String key = iterator.next(); Integer value = map.get(key); }
集合工具类
Properties 类
Properties 工具类用于处理属性文件(所谓属性文件就是将Map 形式的键/值对数据存在一个扩展名为“.properties”的文本文件中,常用作软件的配置文件)
Collections 类
Collections 工具类用于操作 Set、List 和 Map 等集合(提供大量方法,用于对集合元素进行排序、查询、修改等操作)
Arrays 类
Arrays 工具类用于操作数组(提供各种操作数组的方法,如排序和搜索)。
集合框架三大特点
-
接口与实现类相分离
-
统一使用迭代器遍历集合
-
支持泛型
集合框架遗留类
由于 Java 的集合框架设计非常久远,中间经历过大规模改进,所以有一小部分集合类是遗留类,不应该继续使用
Hashtable 类
一种线程安全的 Map 实现
Vector 类
一种线程安全的 List 实
Stack 类
基于 Vector 实现的 LIFO 栈
Enumeration<E>
接口
已被 Iterator<E>
取代