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