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<String, Integer> map=new HashMap<String, Integer>();
          Integer i1=map.put("张三", 23);
          Integer i2=map.put("li三", 23);
          Integer i3=map.put("李四", 23);
          Integer i4=map.put("王五", 23);//相同的键不存储,值覆盖,把被覆盖的值返回
          //map.remove("张三");//根据键删除值
          Collection<Integer> c=map.values();
          System.out.println(c);//获取对象中所有的值
          System.out.println(map.containsKey("张三"));//是否包含传入的键
          System.out.println(map.containsValue(23));//是否包含传入的值

          //2.遍历Map集合
          //方法一:(不简便)
          Map<String, Integer> map1=new HashMap<String, Integer>();
          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<String, Integer> map2=new HashMap<String, Integer>();
          map2.put("张三", 11);
          map2.put("李四", 12);
          map2.put("王五", 13);

          Set<Map.Entry<String, Integer>> entrySet=map2.entrySet();//将键和值封装成Entry对象,并存储在Set集合中
          //获取每一个对象
          Iterator<Map.Entry<String, Integer>> it=entrySet.iterator();
          for (Map.Entry<String, Integer> 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值

LinkedHashMap

和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<cat, Integer> treeMap = new TreeMap<cat, Integer>();
        treeMap.put(c1, 10);
        treeMap.put(c2, 15);
        treeMap.put(c3, 5);
        treeMap.put(c4, 20);

        for (Map.Entry<cat, Integer> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey() + " = " + entry.getValue());
        }
        }
}

class cat implements Comparable<cat>{
    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) {
        return  o.count - this.count;
    }
}

运行结果:

file

总结

  • HashMap:适用于Map中插入、删除和定位元素。
  • Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

本文由博客一文多发平台 OpenWrite 发布!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值