目录
一、集合框架
Java 集合框架主要包括两种类型的容器:
- 集合(Collection)—— 存储一个元素集合;
- 图(Map)—— 存储键/值对映射;
下面将对这两种集合框架进行详细地介绍。
二、Collection
:接口 :类
Collection是一个顶层接口,主要用来定义集合。
而Collection派生出三个子接口,分别是List,Queue,Set。
- List:有序可重复的集合,可直接根据元素的索引来访问
- Queue:队列
- Set:无序不可重复的集合,只能根据元素本身来访问
(一)List
Java学习笔记——Collection之List_柠檬不甜会酸的博客-CSDN博客
(二)Queue
Java学习笔记——Collection之Queue_柠檬不甜会酸的博客-CSDN博客
(三)Set
Java学习笔记——Collection之Set_柠檬不甜会酸的博客-CSDN博客
三、Map
:接口 :类
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。
Map的实现类方法:
- HashMap:数组 + 链表 + 红黑树
- WeakHashMap:是一个弱引用,基于哈希表的Map基础实现
- TreeMap:红黑树
- Hashtable:数组
- IdentityHashMap
- EnumMap
(一)HashMap
Java学习笔记——Map之HashMap_柠檬不甜会酸的博客-CSDN博客
(二)WeakHashMap
- WeakHashMap类基于哈希表的Map基础实现,带有弱键;
- 基于map接口,是一种弱键相连,WeakHashMap里面的键会自动回收;
- 支持null值和null键;
- 不允许重复;
- fast-fail机制;
- WeakHashMap经常用作缓存;
在Java中,引用共分为四种,分别是:强引用、软引用、弱引用和虚引用。
WeakHashMap则是弱引用。
(三)TreeMap
Java学习笔记——Map之TreeMap_柠檬不甜会酸的博客-CSDN博客
(四)Hashtable
- 初始容量:Hashtable的默认初始容量大小是11;
- 线程安全:线程安全;
- HashTable 的元素是头插法;
- HashTable:数组 + 链表;
- 不允许使用null值和null键;
代码示例
import java.util.Hashtable;
public class Day35 {
public static void main(String[] args){
// 创建hashtable
Hashtable<String, String> hashtable = new Hashtable<String, String>();
// 添加
System.out.println("------put()------");
hashtable.put("name", "Jack");
hashtable.put("age", "20");
hashtable.put("sex", "man");
hashtable.put("height", "188");
hashtable.put("weight", "80");
System.out.println(hashtable);
// 判断
if (hashtable.containsKey("name")){
System.out.println(hashtable.get("name"));
}
// 删除
if (hashtable.containsValue("20")){
hashtable.remove("age");
System.out.println(hashtable);
}
// 遍历
for (String key: hashtable.keySet()){
String value = hashtable.get(key);
System.out.println("key: " + key + ", value: " + value);
}
}
}
{height=188, age=20, name=Jack, sex=man, weight=80}
Jack
{height=188, name=Jack, sex=man, weight=80}
key: height, value: 188
key: name, value: Jack
key: sex, value: man
key: weight, value: 80
(五)IdentityHashMap
- IdentityHashMap不是一个通用的Map实现,虽然实现了Map接口,但其违反了Map的约定,即比较对象时使用equals方法。
- IdentityHashMap无序,并且不是线性安全的。
关于其使用equal比较对象这句话,下面简单用几个例子说明。
Map是由key-value构成,若key相同,则不再重复添加。
对于一般的Map实现类来说,即所指对象的值是否相同;
Map<String, String> hashmap = new HashMap<>();
hashmap.put("name", "Jack");
hashmap.put("name", "Marry");
hashmap.put("name", "Tom");
hashmap.put("name", "Jerry");
System.out.println(hashmap);
hashmap.put(new String("name"), "Jack");
hashmap.put(new String("name"), "Marry");
System.out.println(hashmap);
{name=Jerry}
{name=Marry}
上述例子表明,所添加的元素key均为name,因此不再重复添加。
而IdentityHashMap不是一个通用的Map实现,虽然实现了Map接口,但其违反了Map的约定,即比较对象时使用equals方法,即比较对象是否相同。
Map<String, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put("name", "Jack");
identityHashMap.put("name", "Marry");
identityHashMap.put("name", "Tom");
identityHashMap.put("name", "Jerry");
System.out.println(identityHashMap);
identityHashMap.put(new String("name"), "Jack");
identityHashMap.put(new String("name"), "Marry");
System.out.println(identityHashMap);
{name=Jerry}
{name=Jerry, name=Jack, name=Marry}