12.1 集合类概述
java.util 包中提供了一些集合类,这些集合类又被称为容器。提到容器不难想到数组。集合类与数组的不同之处是:数组的长度是固定的,集合的长度是可变的;数组用来存放基本数据类型的数据,集合用来存放对象的引用。
12.2 Collection接口
Collection 接口是层次结构中的跟接口,构成 Collection 的单位元素。
collection实现子类可以存放多个元素,每个元素可以是Object
有些Collection的实现类,可以存放重复的元素,有些不可以
有些Collection的实现类,有些是有序的(List),有些不是有序(Set)
Collection接口没有直接的实现子类,是通过它的子接口Set 和 List来实现的
常用方法
以实现子类ArrayList来演示.CollectionMethod.java
add:添加单个元素
remove:删除指定元素
contains:查找元素是否存在
size:获取元素个数
isEmpty:判断是否为空
clear:清空
addAll:添加多个元素
containsAll:查找多个元素是否都存在
removeAll:删除多个元素
迭代器遍历:
package 课本;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class 例1201 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("《Java从入门到精通》");
list.add("《零基础学Java》");
list.add("《Java精彩编程200例》");
Iterator<String> it = list.iterator();
while (it.hasNext()){
String str = (String) it.next();
System.out.println(str);
}
}
}
12.3 list 集合
12.3.1 list 接口的实现类
list接口继承了 collection 接口,因此包含 Collection 接口中的所有方法。此外,List 接口还定义了以下两个非常重要的方法:
get(int index):获得指定索引位置的元素
set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象。
12.3.1 list 接口的实现类
List 接口的常用实现类有 ArrayList类与 LinkedList类,简述如下:
ArrayList类实了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问。缺点是向指定的索引位置插入对象或删除对象的速度较慢。
LinkedList类采用链表结构保存对象。这种结勾的优点是便于向集合中插入和删除对象。需要向集合中插入、删除对象时,使用 LinkedList 类实现的List集合的效率较高;但对于随机访问集合中的对象,使用LinkedList类实现List集合的效率较低。
使用List 集合时通常声明为List类型,可通过不同的实现类来实例化集合。通过ArrayListLiabedList类分别实例化List集合的代码如下:
List<E> list = new ArrayList<>();
List<E> list2 = new LinkedList<>();
例题 12.2
package 课本;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class p210 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
int i = (int)(Math.random()*list.size());
System.out.println("随机获取集合中的元素:" + list.get(i));
list.remove(2);
System.out.println("hhh");
for (String a:list){
System.out.println(a);
}
System.out.println("迭代器");
Iterator<String> it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
}
12.4 Set 集合
HashSet 类实现 set 接口,由哈希表支持。不保证 Set
TreeSet 类不仅实现了Set接口,还实现了 java.util.SortedSet 接口,因此 TreeSet 类实现的 Set 集合在迭代器中以自然顺序排列。(红黑树)
方法 功能描述
first() 返回此 Set 集合中当前第一个(最低)元素
last() 返回此 Set 集合中当前最后一个(最高)元素
comparator()
返回对此 Set 集合中的元素进行排序的比较器。如果此 Set 集合使用自然顺序,
则返回null
headSet(E toElement) 返回一个新的 Set 集合,新集合是 toElement 对象(不包含)之前的所有对象
subSet(E fromElement,
E fromElement)
返回一个新的 Set 集合,是 fromElement 对象(包含)与 fromElement 对象
(不包含)之间的所有对象
tailSet(E fromElement)
返回一个新的 Set 集合,新集合包含 fromElement 对象(包含)之后的所有
对象
contains(Objeck o) 检测元素是否存在
例题12.3:
package 课本;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class 例p211 {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(-5);
set.add(-7);
set.add(10);
set.add(6);
set.add(3);
Iterator<Integer> it = set.iterator();
System.out.println("Set集合的元素");
while (it.hasNext()){
System.out.print(it.next() + " ");
}
}
}
12.5 Map 集合
Map接口中常见的方法
方法 功能描述
put(K key,V value)
向集合中添加指定的 Key 与 Value 的映射关系
containsKey(Objeck Key) 如果此映射包含指定 Key 的映射关系,则返回 true
contains Value(Objeck Value) 如果此映射将一个或多个 Key 映射到指定值,则返回 true
get(Objeck key) 如果存在指定元素的 key 对象,则返回该对象的值,否者返回 null
key(Objeck key)
返回该集合中的所有 key 对象形成的 Set 集合
value() 返回该集合中的所有值对象形成的 Collection 集合
12.5.2 Map 接口的实现类
HashMap:基于哈希表的Map接口的实现
TreeMap:不仅类不仅实现了map接口,还实现了 java.util.SortedMap 接口
例题12.4:
package 十二;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapText {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("ISBN-978654","java从入门到精通");
map.put("ISBN-978361","Android从入门到精通");
map.put("ISBN-978893","21天学Android");
map.put("ISBN-978361","21天学java");
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
System.out.println("key 值:");
while (it.hasNext()){
String key = it.next();
String value = map.get(key);
System.out.println(key + " " + value);
}
/*
* Collection<String> coll = map.values(); it = coll.iterator();
* System.out.println("\nvalue 值:"); while (it.hasNext()){
* System.out.print(it.next() + " "); }
*/
}
}