现在的位置: 首页 > 综合 > 正文

java基础_Day17

2017年11月05日 ⁄ 综合 ⁄ 共 6685字 ⁄ 字号 评论关闭

1,collections:
          用于操作集合的工具类。collections类没有构造行函数,其中的方法都是静态的。定义了给集合排序,二分查找,将集合转换成安全的方法。
     
2,比较collection与collentions
collection是集合框架中的一个顶层接口。有List.、Set、Vector等子接口
collections是集合的一个工具类。
3,sort方法:
static <T extends Comparable<? super T>> void  sort(List<T> list) 

          根据元素的自然顺序 对指定列表按升序进行排序。
static <T> void  sort(List<T> list, Comparator<? super T> c)
          根据指定比较器产生的顺序对指定列表进行排序。

import java.util.*;
class CollectionsDemo1
{
     public static void main(String[] args)
     {
          List<String> list = new ArrayList<String>();
         
          list.add("abc");
          list.add("aaa");
          list.add("bv");
          list.add("a");
          sop(list);
          Collections.sort(List);//根据自然顺序排序。
          Collections.sort(list,new MyCompare());//根据指定比较器的排序方法进行排序。
          sop(list);
     }
    
     public static void sop(Object obj)
     {
          System.out.println(obj);
     }
}
class MyCompare implements Comparator<String>//定义一个比较器,按照字符串长度排序,如果长度一样,再调用String的compareTo方法比较两个字符串儿的字典顺序。
{
     public int compare (String s1,String s2)
     {
          if(s1.length()>s2.length())
               return 1;
          if(s1.length()<s2.length())
               return -1;
          return s1.compareTo(s2);
     }
}

4,max方法:
static <T extends Object & Comparable<? super T>>  T max(Collection<? extends T> coll) 
          根据元素的自然顺序,返回给定 collection 的最大元素。 
static <T> T  max(Collection<? extends T> coll, Comparator<? super T> comp) 
          根据指定比较器产生的顺序,返回给定 collection 的最大元素。 

5,binarySearch及其他方法:

static <T> int  binarySearch(List<? extends Comparable<? super T>> list, T key) 
          使用二分搜索法搜索指定列表,以获得指定对象。 
static <T> int  binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 
          使用二分搜索法搜索指定列表,以获得指定对象。 
static <T> boolean addAll(Collection<? super T> c, T... elements)
          将所有指定元素添加到指定 collection 中。

static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
          使用二分搜索法搜索指定列表,以获得指定对象。
static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
          使用二分搜索法搜索指定列表,以获得指定对象。

static <T> void copy(List<? super T> dest, List<? extends T> src)
          将所有元素从一个列表复制到另一个列表。

static <T> void fill(List<? super T> list, T obj)
          使用指定元素替换指定列表中的所有元素。

static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
          使用另一个值替换列表中出现的所有某一指定值。

static <T> void fill(List<? super T> list, T obj)
          使用指定元素替换指定列表中的所有元素。

static void reverse(List<?> list)
          反转指定列表中元素的顺序。

static void swap(List<?> list, int i, int j)
          在指定列表的指定位置处交换元素。

static <T> Comparator<T> reverseOrder()
static <T> Comparator<T> reverseOrder(Comparator<T> cmp)
          返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。

static void shuffle(List<?> list, Random rnd)
          使用指定的随机源对指定列表进行置换。

static <T> Collection<T> synchronizedCollection(Collection<T> c)
          返回指定 collection 支持的同步(线程安全的)collection。
static <T> List<T> synchronizedList(List<T> list)
          返回指定列表支持的同步(线程安全的)列表。
static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
          返回由指定映射支持的同步(线程安全的)映射。
static <T> Set<T> synchronizedSet(Set<T> s)
          返回指定 set 支持的同步(线程安全的)set。

6,Arrays类:用于操作数组,里边都是static方法

            static <T> List<T> asList(T... a)  //将数组转换成集合
            好处?
                    可以利用集合的思想操作数组,除了增删操作,因为数组的长度是固定的。会反生UnsupportedOperationException
              如果数组中的元素都是对象,那么转换成集合时,数组中的元素就直接转换成集合中的元素。
           如果数组中的元素是基本数据类型,那么会将数组作为集合中的元素。
          eg:

import java.util.*;

class ArrDemo

{

     public static void main(String[] args)

     {

//          int[] arr = new int[]{1,2,3};

          Integer[] arr = {1,2,3};

          List list_arr = Arrays.asList(arr);

          sop(list_arr);

//          sop(Arrays.toString(arr));//toString:将数组转换成字符串。

          String[] arr1 = {"abc","def","ghi"};

          List<String> list = Arrays.asList(arr1);

          sop(list);

          sop(list.contains("abc"));

          sop(list.get(0));

          sop(list.indexOf("abc"));

          sop(list.subList(0,3));

//          list.add("aaa");//UnsupportedOperationException

     }

     public static void sop(Object obj)

     {

          System.out.println(obj);

     }

}

7,将集合转换成数组:

import java.util.*;
class ArraysARR
{
     public static void main(String[] args)
     {
          ArrayList<String> al = new ArrayList<String>();
          al.add("abc");
          al.add("def");
          al.add("ghi");
//          System.out.println(al);
          String[] arr = al.toArray(new String[9]);//[abc, def, ghi, null, null, null, null, null, null]
          System.out.println(Arrays.toString(arr));
     }
}
<T> T[] toArray(T[] a):返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
1,传递的数组长度定义多长?
     如果定义的长度小于集合的长度,那么会该方法内部会创建一个新的数组,长度为al.size();
     如果定义的长度大于集合的长度,那么就不会创建数组,而是使用传递进来的数组。
2,为什么要将集合转换成数组?
     为了限定对元素增删的操作。
8,高级for循环:
1,高级for循环的格式:
     for(数据类型 变量名称:操作的数组或者集合(Collection)的名称)
2,高级for循环的用途:
     用于获取集合或者数组中的元素。
     但是不能对其中的元素进行增删改查等的操作。
     iterator可以进行remove操作
     listIterator可以对集合进行增删改查等操作。
3,高级for与传统for的区别:
     高级for:简化了书写,但是必须有操作的对象,但不能进行角标操作。
     传统的for:可以进行角标定义。
import java.util.*;
class Forfor
{
     public static void main(String[] args)
     {
          ArrayList<String> list = new ArrayList<String>();
          list.add("abc");
          list.add("efg");
          list.add("ijk");
          //高级for操作集合:
          for(String s:list)
          {
               sop(s);
          }
//          Iterator it = list.iterator();
//          while(it.hasNext())
//          {
//               sop(it.next());
//          }
          //高级for操作数组:
          int[] arr = new int[]{1,2,3,4};
          for(int x:arr)
          {
               sop(x);
          }
//          for(int x=0;x<arr.length;x++)
//          {
//               sop(arr[x]);
//          }
          //利用高级for遍历Map集合:
          HashMap<Integer,String> map = new HashMap<Integer,String>();
          map.put(11,"haha");
          map.put(22,"ahha");
          map.put(33,"opop");
          //1,使用keySet方法:
//          Set<Integer> keySet = map.keySet();
//          for(Integer i:keySet)
//          {
//               sop(i+"::"+map.get(i));
//          }
          //2,使用entrySet方法:
          Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
          for(Map.Entry<Integer,String> ii:entrySet)
          {
               sop(ii.getKey()+":::::"+ii.getValue());
          }
     }
     public static void sop(Object obj)
     {
          System.out.println(obj);
     }
}
9,JDK1.5新特性:可变参数。
//JDK1.5以后出现的新特性:
//     可变参数:其实就是数组的简写形式,不用每一次都手动建立对象,只需要将操作的元素作为参数传递即可,隐式将这些参数转换成了数组。

class Jdk
{
     public static void main(String[] args)
     {
          show("hhhh",1,2,3,4);//传递多次参数:参数类型要一致;可变参数一定要定义在参数列表的最后面。
//          show(1,2);
     }
     public static void show(String str,int... arr)
     {
          System.out.println(arr.length);
     }
}

10,静态导入:
import java.util.*;
import static java.util.Arrays.*;//导入了Arrays类中所有的静态成员。
import static java.util.Collections.*;
import static java.lang.System.*;
class  staticImport
{
     public static void main(String[] args)
     {
          int[] arr = new int[]{11,2,32,4};
          sort(arr);
          out.println(Arrays.toString(arr));

          ArrayList<String> list = new ArrayList<String>();
          list.add("a");
          list.add("c");
          list.add("b");
          sort(list);
          out.println(list);
     }
}

                         

            

【上篇】
【下篇】

抱歉!评论已关闭.