1.Java 集合框架
集合框架体系:
集合接口,集合框架定义了一些接口。本节提供了每个接口的概述:
2.接口描述
1、 Collection 接口
Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)
Collection 接口存储一组不唯一,无序的对象。
Collection接口中提供的一些常用的方法,使用于set和List:
函数 | 意义 |
---|---|
boolean add(E e) | 确保此集合包含指定的元素(可选操作) |
boolean contains(Object o) | 如果此集合包含指定的元素,则返回 true 。 |
boolean equals(Object o) | 将指定的对象与此集合进行比较以获得相等性。 |
int hashCode() | 返回此集合的哈希码值。 |
boolean isEmpty() | 如果此集合不包含元素,则返回 true 。 |
Iterator iterator() | 返回此集合中的元素的迭代器。 |
boolean remove(Object o) | 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 |
int size() | 返回此集合中的元素数。 |
Object[] toArray() | 返回一个包含此集合中所有元素的数组。 |
2、 List 接口
List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
List 接口存储一组不唯一,有序(插入顺序)的对象。
常见的实现类:
ArrayList、LinkedList
3、 Set
Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。Set 接口存储一组唯一,无序的对象。
常见的实现类:
HashSet
4、 SortedSet
继承于Set保存有序的集合。
5、 Map
Map 接口存储一组键值对象,提供key(键)到value(值)的映射。
常见的实现类:
HashMap ,LinkedHashMap
map接口中一些常用的方法:
函数 | 意义 |
---|---|
V put(K key, V value) | 将指定的值与该映射中的指定键相关联(可选操作)。 |
V remove(Object key) | 如果存在(从可选的操作),从该地图中删除一个键的映射。 |
default V replace(K key, V value) | 只有当目标映射到某个值时,才能替换指定键的条目 |
default boolean replace(K key, V oldValue, V newValue) | 仅当当前映射到指定的值时,才能替换指定键的条目。 |
boolean containsKey(Object key) | 如果此映射包含指定键的映射,则返回 true 。 |
boolean containsValue(Object value) | 如果此地图将一个或多个键映射到指定的值,则返回 true 。 |
Set<Map.Entry<K,V>> entrySet() | 返回此地图中包含的映射的Set视图。 |
Set keySet() | 返回此地图中包含的键的Set视图。 |
V get(Object key) | 返回到指定键所映射的值,或 null如果此映射包含该键的映射。 |
int hashCode() | 返回此地图的哈希码值。 |
Collection values() | 返回此地图中包含的值的Collection视图。 |
int size() | 返回此地图中键值映射的数量。 |
boolean equals(Object o) | 将指定的对象与此映射进行比较以获得相等性。 |
6 Map.Entry
描述在一个Map中的一个元素(键/值对)。是一个 Map 的内部接口。
7 SortedMap
继承于 Map,使 Key 保持在升序排列。
8 Enumeration
这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。
3.集合遍历(除了map集合)
import java.util.*;
public class Test{
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("HAHAHAHA");
//第一种遍历方法使用 For-Each 遍历 List
for (String str : list) {
//也可以改写 for(int i=0;i<list.size();i++) 这种形式
System.out.println(str);
}
//第二种遍历,把链表变为数组相关的内容进行遍历
String[] strArray=new String[list.size()];
list.toArray(strArray);
for(int i=0;i<strArray.length;i++) //这里也可以改写为 for(String str:strArray) 这种形式
{
System.out.println(strArray[i]);
}
//第三种遍历 使用迭代器进行相关遍历
Iterator<String> ite=list.iterator();
while(ite.hasNext())//判断下一个元素之后有值
{
System.out.println(ite.next());
}
}
}
4.map集合遍历
Map是java中的接口,Map.Entry是Map的一个内部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法。
keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
map不能直接使用迭代器因为map没有像set继承Collection所以得如下方式使用
import java.util.*;
public class Test{
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
//第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第三种:推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
}