zoukankan      html  css  js  c++  java
  • 08-java学习笔记-集合框架中的工具类

    集合框架中的工具类
    1.Collections类     
         类中都是静态方法
         对集合进行查找
         取出集合中的最大值,最小值
         对List集合进行排序
    1.  list具备比较性或者传入一个比较器
         sort 对List集合进行排序
         max 获取最大值
      
         binarySearch(list, key)
         返回list中要查找值的索引(-index-1)
         
    import java.util.*;

    public class CollectionsDemo
    {
         public static void main(String[] args)
         {
              sortDemo();    
         }
         public static void sortDemo()
         {
              List<String> list = new ArrayList<String>();

              list.add("adssd");
              list.add("s");
              list.add("aaa");
              list.add("zdds");
              list.add("sfw");

              Collections.sort(list);
              //String max = Collections.max(list);
              sop(list);
              
              int index = Collections.binarySearch(list, "aab");
              sop("index = "+index);
         }

         public static void sop(Object obj)
         {
              System.out.println(obj);
         }
    }

    class StrLenComparator implements Comparator<String>
    {
         public int compare(String s1, String s2)
         {
              if(s1.length() > s2.length())
                        return 1;
              else if(s1.length() < s2.length())
                        return -1;
              else
                        return 0;
         }
    }
    2. 替换反转
    Collections.fill(list,"pp");//将list集合中所有元素替换成指定元素
    //练习,将list集合中部分元素替换成指定元素
    Collections.replaceAll(list,"aaa","pp");
    //将list中的"aaa"替换成"pp"
    Collections.reverse(list);
    //反转list
    Collections.reverseOrder()
    //返回与指定比较器逆向的比较器
    3.synchroniazed
       synchroniazedList
       synchroniazedMap
       synchroniazedSet
    4.swap(list, i,j)
    5.shuffle 将集合中元素随机·排列
    2.对数组进行操作Arrays类
         binarySearch()对数组进行二分查找
         copyof()
         copyOfRange()
         equals()
         deepEquals()
         sort//对数组进行排序
         toString() 将数组转换成字符串    
         
         asList()
              //将数组转成List集合
              把数组变成集合就可以就集合的思想和方法来操作数组中的元素
              这个集合不可以使用增删方法。因为数组的长度是固定的。
              如果增删了会发生不支持操作异常UnsupportedOperationException
              如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素
              如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在
         集合转成数组
              Collection接口中的toArray方法
              ArrayList<String> al = new  ArrayList<String>();
              String[] arr=al.toArray(new String[0]);
              1.参数中的数组要定义多长?
              当指定类型的数组小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size
              当指定类型的数组大与了集合的size,就不会新创建数组。而是使用传递进来的数组。
              所以创建一个刚刚好的数组最优
              2.为什么要将集合变数组
              为了限定对元素的操作。不需要进行增删。
         
    3.新增for语句

    Collection在JDK1.5后出现的父接口Iterable就是提供了这个for语句。
    格式:
    for(数据类型  变量名:被遍历的数组或集合(Collection))
    {
         执行语句;
    }
    简化了对数组,集合的遍历。
    底层原理还是迭代器。
    只能获取集合元素。但是不能对集合进行操作。
    迭代器除了遍历,还可以remove集合中的元素。
    如果使用ListIterator,还可以在遍历过程中进行增删改查的动作。
    传统for和高级for的区别
         高级for有一个局限性。必须有被遍历的目标。
         建议在数组进行遍历的时候,还是希望使用传统for,可以使用角标
         ArrayList<String> al  = new ArrayList<String>();
         al.add("abc1");
         al.add("abc2");
         al.add("abc3");
         for(String s:al)
         {
              //s="kk";//只能取出
              System.out.println(s);
         }
         System.out.println(al);
    高级for语句对map中的元素遍历
              HashMap<Integer,String> hm = new HashMap<Integer,String>();
              hm.put(1,"a");
              hm.put(2,"b");
              hm.put(3,"c");
              Set<Integer> keySet = hm.keySet();
              for(Integer i : keySet)
              {
                   System.out.println(i+"::"+hm.get(i));
              }
    //          Set<Map.Entry<Integer,String>> entrySet = hm.entrySet();
    //          for(Map.Entry<Integer,String> me : entrySet)

              for(Map.Entry<Integer,String> me : hm.entrySet())
              {
                   System.out.println(me.getKey()+"------"+me.getValue());
              }
             
              //如果没有泛型限定,用Object
              ArrayList  al = new ArrayList();
              for(Object a:al)
              {     
              }
    4.可变参数
    可变参数。
              其实就是数组参数的简写形式。
              不用每一次都手动的建立数组对象。
              只要将要操作的元素作为参数传递即可。
              隐式将这些参数封装成了数组。
              如果有多个参数,只能有一个可变参数,且位于参数列表的最后
    返回值类型 函数名(参数类型… 形式参数)
    {
         执行语句;
    }
    其实接收的是一个数组,可以指定实际参数 个数。
    5.静态导入

    import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员
         
    当类名重名时,需要指定具体的包名。
    当方法重名时,指定具体所属的对象或者类。
    import static java.lang.System.*;//导入了System中所有的静态成员。
    out.println("hah");
  • 相关阅读:
    POJ 1082 博弈推规律
    博弈论总结
    POJ 2502 Subway 关键在建图
    【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
    一位ACMer过来人的心得
    POJ1724 Dij队列优化邻接表
    Dijkstra队列优化矩阵版
    Uva247 Floyd传递闭包+map处理
    简爬新浪新闻网
    爬href链接
  • 原文地址:https://www.cnblogs.com/chasingw/p/4849129.html
Copyright © 2011-2022 走看看