一肪跋、Util 工具類
工具類的Collections和Arrays中的方法全是靜態(tài)的烟零,下面主要總結(jié)幾個比較重要的方法媒役。
1仪际、Collections工具類:
在Collections工具類中很多方法是用于對List集合進行操作的围小,如比較,查找树碱,隨機排序等等
1肯适、集合的各種方法:
1)查找:
T max(Collection<? extends T> coll)
---> 根據(jù)集合的自然順序,獲取coll集合中的最大元素
T max(Collection<? extends T> coll,Comparator<? super T> comp)
---> 根據(jù)指定比較器comp的順序成榜,獲取coll集合中的最大元素
int binarySearch(Lsit<? extends Comparable<? super T>> list,Tkey)
---> 二分法搜索list集合中的指定對象
2)替換:
void fill(List<? super T> list, T obj)
---> 將list集合中的全部元素替換成指定對象obj
boolean replaceAll(List<T> lsit,T oldVal,T newVal)
---> 使用newVal替換list集合中的oldVal值
3)排序:
void shuffle(List<?> list)
---> 使用默認隨機源對list集合中的元素進行隨機排序
void sort(Lsit<T> list)
---> 根據(jù)自然順序?qū)ist集合中的元素進行排序
void sort(List<T> lsit,Comparator<? super T> c)
---> 根據(jù)指定比較器c的排序方式對list集合進行排序
4)反轉(zhuǎn)
reverse(List<?> list)
---> 反轉(zhuǎn)list集合中元素的順序
Comparator reverseOrder()
---> 返回一個比較器框舔,強行逆轉(zhuǎn)了實現(xiàn)Comparable接口的對象的自然順序
Comparator reverseOrder(Comparator<T> cmp)
---> 返回一個比較器,強行逆轉(zhuǎn)了指定比較器的順序
示例:
......
public static void sop(Object obj)
{
System.out.println(obj);
}
//定義比較器
class StrLenCom implements Comparator<String>
{
public int compare(String s1,String s2)
{
int n = new Integer(s1.length()).compareTo(new Integer(s2.length()));
if (n == 0)
return s1.compareTo(s2);
return n;
}
}
......
List<String> list = new ArrayList<String>();
list.add("abd");
list.add("cd");
list.add("f");
list.add("yyyy");
list.add("abd");
//打印原集合
sop(list);
sop("--------------排序-------------------");
//隨機排序:
Collections.shuffle(list);
sop("隨機排序:" + list);
//對元素排序赎婚,存入的對象必須具備比較性
Collections.sort(list);
//打印新集合
sop("自然排序后的集合元素:" + list);
//按指定比較器順序排序
Collections.sort(list,new StrLenCom());
sop("長度排序:" + list);
sop("------------獲取最大元素-----------------");
//獲取最大元素
String max = Collections.max(list);
sop("max = " + max);
sop("--------------查找--------------------");
int index = Collections.binarySearch(list,"acd");
sop("二分法查找值:" + index);
int ex = half(list,"acd");
sop("二分法查找值:" + ex);
Collections.sort(list,new StrLenCom());
sop("排序后的集合元素:" + list);
int x = half2(list,"acd",new StrLenCom());
sop("二分法查找值:" + x);
sop("---------------替換-反轉(zhuǎn)----------------");
//反轉(zhuǎn)
Collections.reverse(list);
sop("反轉(zhuǎn)后:" + list);
//替換
Collections.fill(list,"pp");
sop("替換后:" + list);
......
創(chuàng)建部分替換方法:
//替換部分字符
public static void fillPart(List<String> list,int start,int end,String str)
{
List<String> li = new ArrayList<String>();
for(int i=start;i<end;i++)
{
li.add(list.get(i));
list.remove(list.get(i));
}
sop(list);
Collections.fill(li,str);
list.addAll(start,li);
}
}
2刘绣、Arrays工具類:
1、Lsit<T> asList(T... a) ---> 將數(shù)組轉(zhuǎn)換為集合
注意:
將數(shù)組轉(zhuǎn)換成集合挣输,不可使用集合的增刪方法纬凤,因為數(shù)組的長度是固定的,如果進行增刪操作撩嚼,則會產(chǎn)生UnsupportedOperationException的編譯異常停士。
a.如果數(shù)組中的元素都是對象挖帘,則變成集合時,數(shù)組中的元素就直接轉(zhuǎn)為集合中的元素
b.如果數(shù)組中的元素都是基本數(shù)據(jù)類型恋技,那么會將該數(shù)組作為集合中的元素存在
2肠套、binarySearch():查找方法,fill():替換方法猖任,sort():排序方法等
特點:可對數(shù)組元素進行相應(yīng)操作你稚,可以接受除boolean之外的其他各種基本數(shù)據(jù)類型及有序的引用類型數(shù)組的參數(shù),且還可以對指定元素的范圍朱躺,并可根據(jù)指定比較器進行相應(yīng)的操作
如:
sort(T[] a,Comparator<? super T> c)
fill(int[]a,int from,int to)
等
3刁赖、String toString() 可以接收各種數(shù)組類型參數(shù),并返回指定數(shù)組內(nèi)容的字符串表現(xiàn)形式
4长搀、集合轉(zhuǎn)為數(shù)組
void toString(String[] s)
---> 將集合轉(zhuǎn)為指定數(shù)組s宇弛,并可通過Arrays.toString(s)獲取數(shù)組s中的元素
1)指定類型的數(shù)組定義的長度:
a.當指定類型的數(shù)組長度小于了集合的size,那么該方法內(nèi)部會創(chuàng)建一個新的數(shù)組源请,長度為集合的size
b.當指定類型的數(shù)組長度大于了集合的size枪芒,就不會創(chuàng)建數(shù)組,而是使用傳遞進來的數(shù)組谁尸,并且多出的元素的值為null
2)為何將集合轉(zhuǎn)為數(shù)組:為了限定對集合中元素的操作舅踪,如增刪,因為想對創(chuàng)建的集合不做增刪方面的操作良蛮。
示例:
......
public static void sop(Object obj)
{
System.out.println(obj);
}
......
int[] arr = {5,8,6};
sop("toString : int[]轉(zhuǎn)為集合:" + Arrays.toString(arr));
String[] sarr = {"ac","eg","nse","gui"};
List<String> list = Arrays.asList(sarr);
sop("asList--String對象數(shù)組轉(zhuǎn)集合:" + list);
List<int[]> li = Arrays.asList(arr);
sop("asList--int[]轉(zhuǎn)集合:" + li);
Integer[] iarr = {5,8,6};
List<Integer> lis = Arrays.asList(iarr);
sop("asList--Integer[]轉(zhuǎn)集合:" + lis);
......
集合轉(zhuǎn)數(shù)組:
ArrayList<String> as = new ArrayList<String>();
as.add("01");
as.add("02");
as.add("03");
sop("原集合" + as);
String[] s = new String[as.size()];
as.toArray(s);
sop("新數(shù)組" + Arrays.toString(s));
二抽碌、小知識點
1、增強for循環(huán)
1决瞳、格式:
for(數(shù)據(jù)類型 變量名 : 被遍歷的集合(Collection)或數(shù)組){執(zhí)行語句}
2货徙、說明:
1)對集合進行遍歷,只能獲取集合的元素皮胡,但是不能對集合進行操作痴颊。
2)迭代器除了遍歷外,還可進行remove集合中元素的操作屡贺,如果使用ListIterator蠢棱,還可在遍歷過程中,對集合進行增刪改查的操作烹笔。
3裳扯、傳統(tǒng)for循環(huán)和增強for循環(huán)區(qū)別:
增強for循環(huán)有局限性。必須有被遍歷的目標谤职;而傳統(tǒng)for循環(huán)有索引。所以建議在遍歷數(shù)組時亿鲜,使用傳統(tǒng)for循環(huán)允蜈。
示例:
import java.util.*;
class ForEachDemo
{
//打印方法
public static void sop(Object obj)
{
System.out.println(obj);
}
//測試
public static void main(String[] args)
{
//創(chuàng)建集合
ArrayList<String> as = new ArrayList<String>();
as.add("01-a");
as.add("02-b");
as.add("03-c");
System.out.println("原集合" + as);
//增強for循環(huán)取出元素
for (String s : as)
{
System.out.println(s);
}
System.out.println("-------------------------");
//創(chuàng)建HashMap集合
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"a");
hm.put(2,"b");
hm.put(3,"c");
hm.put(4,"d");
System.out.println("hm原集合:" + hm);
//增強for循環(huán)的兩種方式測試
//keySet方法
sop("keySet方法:|--");
for(Integer i : hm.keySet())
{
sop(i + ":-" + hm.get(i));
}
//entrySet方法
sop("entrySet方法--");
for(Map.Entry<Integer,String> me : hm.entrySet())
{
sop(me.getKey() + "-->" + me.getValue());
}
}
}
2冤吨、可變參數(shù):
如果在參數(shù)列表中傳入多個參數(shù),個數(shù)不確定饶套,每次都要復(fù)寫該方法漩蟆,可變參數(shù)的出現(xiàn)就可以省去復(fù)寫的麻煩,而直接對數(shù)組進行操作
注意:可變參數(shù)一定要定義在參數(shù)列表的后面妓蛮。
示例:
......
//1.5版本前寫法
public static void show(int a,int b)
{
System.out.println(a + " :" + b);
}
//1.5新特性怠李,可加入更多的值
public static void show(int... arr)
{
System.out.println(arr.length);//結(jié)果為數(shù)組arr的長度
System.out.println(arr);//arr的地址值
}
public static void print(String... s)
{
//遍歷字符串數(shù)組s
for(String str : s)
{
System.out.print(str);
}
System.out.println();
}
......
3、靜態(tài)導(dǎo)入:
靜態(tài)導(dǎo)入蛤克,是將類中的所有靜態(tài)成員導(dǎo)入進來捺癞,但需要注意的是,當導(dǎo)入的兩個類中有同名成員時构挤,需要在成員前加上相應(yīng)的類名髓介。
當類名重名時,需要制定具體的包名筋现;當方法名重名時唐础,制定具體所屬的對象或類。
1矾飞、import static java.util.Arrays.*;
---> 寫入的是Arrays類中的所有靜態(tài)成員一膨。
2、import static java.lang.System.*;
---> 導(dǎo)入了System類中的所有靜態(tài)成員
示例:
import java.util.*;
import static java.util.Arrays.*;//導(dǎo)入的是Arrays類中的所有靜態(tài)成員
import static java.lang.System.*;//導(dǎo)入的是System類中的所有靜態(tài)成員
class Demo
{
public static void main(String [] args)
{
int[] arr = {2,7,6,3};
sort(arr);
out.println(Arrays.toString(arr));//此處不可省略Arrays洒沦,原因見下
}
}