黑马程序员->集合类 (2 Map

来源:互联网 发布:linux查看内核版本 编辑:程序博客网 时间:2024/06/06 13:02

--------------------android培训、java培训、期待与您交流! ------------------

3.0.Map...................................................................... 
  3.1.....Map 集合:该集合存储键值对,一对一对往里存,而且保证键的唯一性。
     1.添加  put(K key, V value);    putAll(Map <? extends K,? extends V> m)
    //添加元素,如果出现添加时,有相同的键,那么后添加的值会覆盖原有的键对应值。
    //并 put 方法会返回被覆盖的值。
     2.删除  clear();  remove(Object key);

     3.判断 containsValue(Object value);   contaninsKey(Object key);   isEmpty();

     4.获取 get(Object key);  size();    values();
    //可以通过get方法的返回值来判断一 个键是否存在。通过返回 null 来判断。
  Map
    |--Hashtable :底层是哈希表数据结构,不可以存入 null 键 null 值。该集合是线程同步的。jdk 1.0,效率低。
    |--HashMap :底层数据结构是哈希表,运行使用 null 键 null 值,该集合是不同的,将 Hashtable 取代,jdk 1.2.效率高。
    |--TreeMap :底层数据结构是二叉树,线程不同步。可以用于给 Map 集合中的键进行排序。
    //和 Set 很像,气势 Set 集合底层就是使用了 Map 集合。
  Map 集合的两种取出方式:
    1.Set <k> keySet :将 Map 中所有的键存入到 Set 集合。因为 Set 具备迭代器。所有可以迭代方式取出所有的键,
        再根据 get 方法,获取每一个键对应的值。
       //Map集合的取出原理:将map集合转成set集合。再通过迭代器取出。
    2.Set<Map.Entry<k,v>> entrySet: 将 Map 集合中的映射关系取出,存入到 Set 集合中。
     // Map.Entry 其实 Entry 也是一个接口,它是 Map 接口中的一个内部接口。
     interface Map
     {
      public static interface Entry
      {
       public abstract Object getKey();
       public abstract Object getValue();
      }
     }
4.0..................................Collections   集合框架的工具类
  4.1... sort 方法,
      //根据元素的自然顺序对指定列表按升序排序。
       public static <T extends Comparable<? super T>>void sort(List<T> list)
     //接收一个list集合,该集合必须是Comparable的子类(就是要具备比较性)。
      直接 Collections.sort(传list集合)  调用就可以给对应list  排序。
    public static <T>void sort(list<T> list,Comparator<? super T> c)
      //还可以接收自定义的比较器来自定义比较。
  4.2.....max 方法
    public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
    //跟sort 方法用法差不多,只是求最大值,返回值类型是 T(传的是什么就返回什么),可以接收任意集合。
    //也可以接收自定义比较器,用法和sort一样。
  4.3....binarySearch (二分查找)方法
    public static <T>int binarySearch(List<? extends Comparable<? super T>> list, T key)
    //因为二分涉及到角标,所以只能传 List 集合,返回角标数。并传入要找的类型(和集合同类型)
    //也可以接收自定义比较器,用法和sort一样。
  4.4......fill(使用指定元素替换指定列表中的所有元素)---> 替换翻转
   public static <T>void fill(List<? super T> list, T obj)
   //
  4.5.....replaceAll (替换元素中某个元素)
  4.6.....reverse    (翻转--打印)
  4.7.....reverseOrder(反转自然顺序--> 结果反着打印)
   public static <T> Comparator<T> reverseOrder()
   //返回一个比较器,逆自然顺序排序。
   //它还可以接收一个自定义比较器,把自定义的比较方法反转。
  4.8..... synchronizedList
   public static <T> List<T> synchronizedList(List<T> list)
   //接受一个List集合,返回一个加锁后的安全的List集合。
  4.9..... swap
      public static void swap(List<?> list, int i,int j)
   //在指定列表的指定位置处交换元素。
  4.10.... shuffle
   public static void shuffle(List<?> list)
   //随机对指定列表进行置换
5.0.....................................Arrays
              用于操作数组的工具类。  里面都是静态方法。
  5.1... public static <T> List<T> asList(T... a)
        //传入数组,返回List集合。  即把数组编程List集合。
 //      把数组变集合可以使用集合的思想和方法来操作数组中的元素。
   但是,将数组变集合,不可以使用集合的增删方法。因为数组的长度是固定的。
  //可以用 contains(); get(); indexOf();  subList();
     如果增删了,会发生 UnsupportedOperationException 异常

     如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。
     如果数组中的元素都是基本数据类型,那么会将该数值作为集合中的元素存在。
  5.2.........//集合变数组  
        toArray();方法
      1.当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组,长度为集合的 size
      当指定类型的数组长度小于了集合的size,就不会创建数组了,而是使用传递机那里的数组(空出来的角标为 null )。
//     SO,创建一个刚刚好的数组最优。
       2.将数组变集合,为了限定对元素的操作。不让进行增删。
6.0..增强 for 循环 forEach   
       for (数据类型 变量名: 被遍历的集合 )
       {
       }对集合进行遍历,只能获取元素,但是不能对集合进行操作。
   //迭代器除了遍历,还可以进行remove 集合中元素的动作。
   如果是用 ListIterator ,还可以在遍历过程中对集合进行增删改查的动作。

   传统 for 和高级 for 的区别:
    高级for有一个局限性,必须有被遍历的目标。
    建议在遍历数组的时候,还是希望用传统 for 因为传统 for 可以定义角标。
     for (String s : al)
     {
      System.out.println(s);
     }
7.0..可变参数
    (函数)方法(接受的类型... 数组名称)
             show(int... arr)-----> 用三个点代替。
   可变参数:
     其实就是数组参数的简写形式,不用每一次都手动的建立数组对象。
     只要将要操作的元素作为参数传递即可,隐式的将这些参数封装成了数组。
     //注意事项:可变参数一定要定义在参数列表最后面。
8.0.....静态导入
     import static java.util.*;
      导入的是 Arrays 这个类中的所有静态成员。
9.0.....System 类
      类中的方法和属性都是静态的。
      System.getProperties();   描述系统的一些信息。获取系统属性信息。 Properties
      因为 Properties 是 Hashtable 的子类,也就是 Map 集合的一个子类对象。
      那么可以通过 Map 的方法取出该集合中的元素。//该集合中存储的都是字符串。没有泛型定义。
      import java.util.*;
    class SystemDemo
    {
     public static void main(String[] args)
     {
      String v = System.getProperty("os.name");
      S.op(v);
      Properties prop = System.getProperties();
      for (Object obj : prop.keySet() )
      {
       String value = (String)prop.get(obj);
       S.op(obj+"----"+value);
      }
     }
    }
10.0................Runtime 类
   Runtime 对象。该类并没有提供构造函数。说明不可以 new 对象,所以该类中的方法应该是静态的,可是该类中的方法还
     有非静态方法。说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,返回值是本类对象。
     //由这个特点可知该类使用了单例设计模式来完成。
     public static Runtime getRuntime();
11.0....Date 类
    获取当前时间。 Date d = new Date();
    //已过时 jdk 1.1 时的
12.0....Calendar 类
    jdk 1.1 以后就用 Calendar 代替了 Date 。 Calendar c = Calendar.getInstance();//获取当前时区,创建一个时间。
    用 c.get() 方法来获取当前的年get(Calendar.YEAR)月get(Calendar.MONTH)
      get(Calendar.DAY_OF_MONTH)日get(Calendar.DAY_OF_WEEK)。
    还可以用add(int field, int anount) 为给定的日历字段加或减指定的时间量。
13.0....Math-Random 类 //数学类
   Math.ceil(double ) ---> 返回大于指定数据的最小整数。(返回 double)
   Math.floor(double )---> 返回小于指定数据的最大整数。(返回 double)
   Math.round(long )---->  返回四舍五入。
   Math.pow(int a,int b)-> 返回 a 的 b 次幂。
   Math.random()  -------> 返回 大于等于 0.0 小于 1.0 的随机数。
  
  util 包内也有 Random 对象。
      Random r = new Random();
      r.nextInt(x);  //返回类型是int,求 x 一下的随机数。

 

 

----------------------android培训、java培训、期待与您交流! --------------------

原创粉丝点击