当前位置:   article > 正文

Map集合和Collections(集合工具类)_collections工具类中的binarysearch()方法中的key是map中的键吗

collections工具类中的binarysearch()方法中的key是map中的键吗

Map集合

将键映射到值的对象。
一个映射不能包含重复的键。
每个键最多只能映射到一个值。
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
Map集合的功能概述
添加功能
V put(K key,V value):添加元素。这个其实还有另一个功能?替换
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
判断功能
boolean containsKey(Object key):判断集合是否包含指定的
boolean containsValue(Object value):判断集合是否包
boolean isEmpty():判断集合是否为空
获取功能
Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set
V get(Object key):根据键获取值
Set keySet():获取集合中所有键的集合
Collection values():获取集合中所有值的集合
长度功能
int size():返回集合中的键值对的对数
Map集合四种遍历方法

public class TestMap {
     public static void main(String[] args) {
          Map<Integer, String> map = new HashMap<Integer, String>();
          map.put(1, "a");
          map.put(2, "b");
         map.put(3, "ab");
         map.put(4, "ab");
         map.put(4, "ab");// 和上面相同 , 会自己筛选
         System.out.println(map.size());
       
         System.out.println("第一种:通过Map.keySet遍历key和value:");
         for (Integer in : map.keySet()) {
             //map.keySet()返回的是所有key的值
             String str = map.get(in);//得到每个key多对用value的值
             System.out.println(in + "     " + str);
         }
         // 第二种:
         System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:");
         Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
         while (it.hasNext()) {
              Map.Entry<Integer, String> entry = it.next();
                System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
         }
         // 第三种:推荐,尤其是容量大时
         System.out.println("第三种:通过Map.entrySet遍历key和value");
         for (Map.Entry<Integer, String> entry : map.entrySet()) {
             //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
             //entry.getKey() ;entry.getValue(); entry.setValue();
             //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
             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);
         }
     }
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

HashMap

HashMap
  数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法
默认初始容量16,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;
方法
1、添加:
V put(K key, V value) (可以相同的key值,但是添加的value值会覆盖前面的,返回值是前一个,如果没有就返回null)
putAll(Map<? extends K,? extends V> m) 从指定映射中将所有映射关系复制到此映射中(可选操作)。
2、删除
remove() 删除关联对象,指定key对象
clear() 清空集合对象
3、获取
value get(key) 可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是null。
4、判断:
boolean isEmpty() 长度为0返回true否则false
boolean containsKey(Object key) 判断集合中是否包含指定的key
boolean containsValue(Object value) 判断集合中是否包含指定的value
5、长度:
Int size()

Hashtable
  Hashtable与HashMap类似,是HashMap的线程安全版,它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。
LinkedHashMap
LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。
TreeMap
  基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出。

HashTable与HashMap
1、同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。
2、HashMap允许存在一个为null的key,多个为null的value 。
3、hashtable的key和value都不允许为null。

Collections工具类

Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法:

  1. 排序操作(主要针对List接口相关)
    reverse(List list):反转指定List集合中元素的顺序
    shuffle(List list):对List中的元素进行随机排序(洗牌)
    sort(List list):对List里的元素根据自然升序排序
    sort(List list, Comparator c):自定义比较器进行排序
    swap(List list, int i, int j):将指定List集合中i处元素和j出元素进行交换
    rotate(List list, int distance):将所有元素向右移位指定长度,如果distance等于size那么结果不变
  2. 查找和替换(主要针对Collection接口相关)
    binarySearch(List list, Object key):使用二分搜索法,以获得指定对象在List中的索引,前提是集合已经排序
    max(Collection coll):返回最大元素
    max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素
    min(Collection coll):返回最小元素
    min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
    fill(List list, Object obj):使用指定对象填充
    frequency(Collection Object o):返回指定集合中指定对象出现的次数
    replaceAll(List list, Object old, Object new):替换
  3. 同步控制
    Collections工具类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解决多线程并发访问集合时线程的安全问题。HashSet、ArrayList、HashMap都是线程不安全的,如果需要考虑同步,则使用这些方法。这些方法主要有:synchronizedSet、synchronizedSortedSet、synchronizedList、synchronizedMap、synchronizedSortedMap。
    特别需要指出的是,在使用迭代方法遍历集合时需要手工同步返回的集合。
  4. 设置不可变集合
    Collections有三类方法可返回一个不可变集合:
    emptyXxx():返回一个空的不可变的集合对象
    singletonXxx():返回一个只包含指定对象的,不可变的集合对象。
    unmodifiableXxx():返回指定集合对象的不可变视图
  5. 其它
    disjoint(Collection<?> c1, Collection<?> c2) - 如果两个指定 collection 中没有相同的元素,则返回 true。
    addAll(Collection<? super T> c, T… a) - 一种方便的方式,将所有指定元素添加到指定 collection 中。示范:
    Collections.addAll(flavors, “Peaches 'n Plutonium”, “Rocky Racoon”);
    Comparator reverseOrder(Comparator cmp) - 返回一个比较器,它强行反转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()(换句话说,它返回一个比较器,该比较器将强行反转实现 Comparable 接口那些对象 collection 上的自然顺序)。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/502643
推荐阅读
相关标签
  

闽ICP备14008679号