Java集合(双链)
Map集合
Map集合是用于保存键值对数据的集合,集合中保存着两种数据,key值 和 value值,key值不能重复,value值可以是任意数据类型,任意值。
HashMap
底层是通过哈希表实现的,因为是异步存储,线程不安全,用做key值的对象必须实现hashCode方法和equals方法,不能保证键值对的存储数据。
import java.util.*;
public class main {
public static void main(String[] args) {//1.Map集合方法
Map map=new HashMap();
Integer i1=map.put("张三", 23);
Integer i2=map.put("li三", 23);
Integer i3=map.put("李四", 23);
Integer i4=map.put("王五", 23);
//相同的键不存储,值覆盖,把被覆盖的值返回
//map.remove("张三");
//根据键删除值
Collection c=map.values();
System.out.println(c);
//获取对象中所有的值
System.out.println(map.containsKey("张三"));
//是否包含传入的键
System.out.println(map.containsValue(23));
//是否包含传入的值//2.遍历Map集合
//方法一:(不简便)
Map map1=new HashMap();
map1.put("张三", 23);
map1.put("李四", 23);
map1.put("王五", 23);
//增强for循环
for (String key : map1.keySet()) { //map.keyset()是所有键的集合
System.out.println(key+"."+map1.get(key));
}//方法二:(推荐)
Map map2=new HashMap();
map2.put("张三", 11);
map2.put("李四", 12);
map2.put("王五", 13);
Set entrySet=map2.entrySet();
//将键和值封装成Entry对象,并存储在Set集合中
//获取每一个对象
Iterator it=entrySet.iterator();
for (Map.Entry entry : entrySet) {
System.out.println(entry.getKey()+" "+entry.getValue());
}}
}
HashMap和Hashtable的区别
- 共同点:都是双链集合,底层都是哈希算法
- 区别:
1.HashMap是线程不安全的,效率高,jdk1.2版本
2.Hashtable是线程安全的,效率低,JDK1.0版本
3.hashMap可以存储null键和null值
4.hashtable不能存储null键和null值
和HashSet中的LinkedHashSet一样,HashMap也有一个LinkedHashMap子类,使用双向链表来维护键值对的次序,迭代顺序和插入顺序保持一致。
TreeMap
底层是通过红黑树实现的,通过红黑树对所有的key进行排序,非线程安全。
TreeMap有两种排序方法:
- 自然排序:TreeMap的所有key必须实现Comparable接口,而且所有key应该是同一个类的对象,否则将会抛出ClassCastExcepiton异常。
- 定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中所有key进行排序。采用定制排序时不要求Map的key实现Comparable接口。
TreeMap中判断两个key相等的标准也是两个key通过equals()方法比较返回true,而通过compareTo()方法返回0,TreeMap即认为这两个key是相等的。直接看实例:
import java.util.*;
class aTreeMap {
public static void main(String[] args) {
cat c1 = new cat("red", 30);
cat c2 = new cat("black", 20);
cat c3 = new cat("white", 10);
cat c4 = new cat("white", 10);
Map treeMap = new TreeMap();
treeMap.put(c1, 10);
treeMap.put(c2, 15);
treeMap.put(c3, 5);
treeMap.put(c4, 20);
for (Map.Entry entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}
}class cat implements Comparable{
String color;
int count;
cat(String c, int s) {
color = c;
count = s;
}public String toString(){
return color + " cat";
}@Override
public int compareTo(cat o) {
returno.count - this.count;
}
}
运行结果:
【Java集合(双链)】
文章图片
总结
- HashMap:适用于Map中插入、删除和定位元素。
- Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 图书集合完毕
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用