Java基础16-集合Map

<--
 1.对于重复元素的处理:
  Set: 当出现重复元素,丢弃
  Map: 当出现重复元素,存入,将原数据进行覆盖
 2.Map.Entry就是一个键值对,是Map集合的组成关系!
 3.Properties:主要用于操作配置文件.
-->

一.Map集合
 1.什么是Map集合
  Map集合可以存储键值对, 在存储的时候存一个键对象和一个值对象.
  集合中的键是唯一的, 可以根据键获取值.


 2.Map集合常用方法
  添加记录: put(K key, V value)
  删除记录: remove(Object key)
  根据键获取值: get(Object key)
  获取长度: size()
  判断是否包含某个键: containsKey(Object o)
  判断是否包含某个值: containsValue(Object o)
  获取所有键组成的集合: keySet()
  获取所有键值对组成的集合: entrySet()


 3.迭代方式
  a.keySet:

  System.out.println("使用keySet()进行遍历: ");
  Map<Person, Integer> map = new HashMap<Person,Integer>();
  map.put(new Person("杨幂",20), 80);
  map.put(new Person("刘亦菲",22), 84);
  map.put(new Person("张娜拉",24), 89);
  
  Set<Person> keySet = map.keySet();
  for(Iterator<Person> it = keySet.iterator(); it.hasNext(); ) {
   Person p = it.next();
   System.out.println(p + "-" + map.get(p));  
  }
  b.entrySet:  

  System.out.println("使用entrySet()进行遍历: ");
  Map<Person, Integer> map = new HashMap<Person,Integer>();
  map.put(new Person("杨幂",20), 80);
  map.put(new Person("刘亦菲",22), 84);
  map.put(new Person("张娜拉",24), 89);
  
  Set<Map.Entry<Person, Integer>> entrySet = map.entrySet();
  for(Iterator<Map.Entry<Person, Integer>> it = entrySet.iterator(); it.hasNext(); ) {
   Map.Entry<Person, Integer> entry = it.next();
   System.out.println(entry.getKey() + "-" + entry.getValue());  
  }


 4.HashMap
  在存储键值对的时候, 使用哈希算法对键对象去重复, 效率高, 没有顺序.
  当存储一个键值对的时候, 先调用键对象的hashCode()方法计算一个哈希值, 在集合中查找是否有哈希值相同键对象.
   如果没有哈希值相同的键对象, 直接将键值对存入.
   如果有哈希值相同键对象, 则和哈希值相同的键对象进行equals()比较.
    比较结果为false就存入键值对.
    比较结果为true则用新的值覆盖旧的值.


 5.TreeMap
  在存储键值对的时候, 通过指定的比较算法, 对键对象进行排序, 以二叉树形式进行存储.
  创建TreeMap时如果没有传入比较器, 则会按照键对象的自然顺序来排序. 自然顺序就是实现了Comparable接口之后compareTo方法中定义的顺序.
  如果我们不希望使用自然顺序排序, 还在TreeMap的构造函数中可以传入一个比较器. 比较器就是实现了Comparator接口的对象, 按照其中compare方法排序.


 6.LinkedHashMap
  HashMap的子类, 实现原理和HashMap相同, 但是可以保留存储顺序.


 7.Hashtable
  Hashtable和HashMap原理相同, 都是基于哈希算法的, Hashtable是线程安全的, 而且Hashtable不允许存储空的键和空的值.


 8.Properties
  Hashtable的子类, 通常用来操作配置文件.
  使用setProperty(String, String)方法来设置一个配置项
  使用getProperty(String)来获取一个配置项的值
  使用propertyNames()方法获取所有Key对象的Enumeration
  使用load(InputStream)来加载数据
  使用list(PrintStream)来写出数据
  
三.知识
 1.集合分类
  Collection: 单列集合, 每次存一个对象
   List: 可重复, 有存储顺序, 可以根据索引控制
    * ArrayList: 数组实现, 查找快
    * LinkedList: 链表实现, 增删快
    Vector: 和ArrayList原理相同, 线程安全, 效率低
   Set: 不可重复
    * HashSet: 使用哈希算法去重复, 效率高
    LinkedHashSet: HashSet的子类, 去重复并且保留存储顺序
    * TreeSet: 可以用指定的比较方法进行排序
  Map: 键值对, 每次存一个键值对
   * HashMap: 使用哈希算法对键去重复, 效率高
   LinkedHashMap: HashMap的子类, 去重复并且保留存储顺序
   Hashtable: 算法和HashMap相同, 不允许null键和null值, 线程安全, 效率低
   Properties: Hashtable的子类, 通常用来操作.properties配置文件
   * TreeMap: 可以用指定的比较方法对键进行排序


 2.集合迭代
  Collection:
   2种通用的方式:
    使用iterator()方法获取Iterator, 使用hasNext()和next()方法进行迭代
    使用增强for循环, 其内部也是使用的Iterator
   List可以使用普通for循环, 调用get(int)方法根据指定索引获取
   Vector可以使用Enumeration进行迭代
  Map:
   通过keySet()方法得到所有Key对象组成的Set, 迭代Set得到每一个Key, 然后再通过Key获取Value
   通过entrySet()方法得到所有Entry对象组成的Set, 迭代Set得到每一个Entry, 然后再调用getKey()和getValue()
   
四.常用工具类
 1.Arrays: 对数组操作
  List<T> asList(T... a)          将数组或者若干相同类型的对象转为一个List
  int binarySearch(int[] a, int key)       二分法查找, 在一个有序且不重复的数组中查找某个元素的位置
  int[] copyOfRange(int[] original, int from, int to)  将指定数组中的一部分拷贝到一个新的数组中
   boolean equals(int[] a, int[] a2)       比较两个数组中元素是否完全相同
   void fill(int[] a, int val)        用指定值替换数组中所有元素
   void sort(int[] a)           对指定数组进行排序
   String toString(int[] a)         将数组转为字符串表达形式


 2.Collections: 对集合操作
  boolean addAll(Collection<? super T> c, T... elements) 将多个同类型的元素一次性添加到Collection中
  int binarySearch(List<T> list, T key)      在List中查找指定元素出现的位置
  void copy(List<? super T> dest, List<? extends T> src) 用src中的元素替换dest中的元素
  boolean disjoint(Collection<?> c1, Collection<?> c2)  判断是否没有相同元素
  void fill(List<? super T> list, T obj)     用指定元素替换集合中所有元素
  int frequency(Collection<?> c, Object o)    统计指定元素在集合中出现的次数
   T max(Collection<? extends T> coll)      找到集合中最大的元素
   T min(Collection<? extends T> coll)      找到集合中最小的元素
   boolean replaceAll(List<T> list, T oldVal, T newVal) 用一个指定元素替换List中另一个指定元素
   void reverse(List<?> list)         反转集合中所有元素
    void sort(List<T> list)         对List进行排序
    void swap(List<?> list, int i, int j)      交换集合中的两个元素
  Enumeration<T> enumeration(Collection<T> c)    从Collection中获取Enumeration
  ArrayList<T> list(Enumeration<T> e)      通过Enumeration得到ArrayList
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值