Java :集合(5)——集合工具类


一、Collections类

 

Collections是Collection的子类。

 

1、Sort :排序

 

static

<T extends Comparable<? super T>>

void

sort(List<T> list)

          根据元素的自然顺序 对指定列表按升序进行排序。

 

public static <T extends Comparable<? super T>> void sort(List<T> list) :

根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的.

注意:此方法不能给Set排序。

 

static

<T> void

sort(List<T> list, Comparator<? super T> c)

          根据指定比较器产生的顺序对指定列表进行排序。

 

public static <T> void sort(List<T> list, Comparator<? super T> c) : 

根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较

[code lang="Java"]

// 直接调用其静态方法
Collections.sort(list);
sop("排序后 :");
sop(list);

// 加入比较器的静态方法
Collections.sort(list, new CollectionsCom());
sop("按照字符串长度排序后 :");
sop(list);

[/code]

 

2、返回指定元素

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 的最大元素。

static

<T extends Object & Comparable<? super T>>

T

min(Collection<? extends T> coll)

          根据元素的自然顺序 返回给定 collection 的最小元素。

static

<T> T

min(Collection<? extends T> coll, Comparator<? super T> comp)

          根据指定比较器产生的顺序,返回给定 collection 的最小元素。

 

[code lang="Java"]

// 返回最大元素
String max_one = Collections.max(list);
sop("最大元素为 : " + max_one);

// 返回带比较器的最大元素
String max_two = Collections.max(list, new CollectionsCom());
sop("最大长度元素为 : " + max_two);

[/code]

 

3、二分查找法,找出指定元素

 

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)

          使用二分搜索法搜索指定列表,以获得指定对象。

 

[code lang="Java"]
// 加入比较器的二分查找
public static int getBinarySearch(List<String> list, String key, Comparator<String> com) {
int max, mid, min;
max = list.size() - 1; // 元素的最大长度
min = 0;
while (min &lt;= max) {
mid = (max + min) >> 1; // >>1 相当于 /2
String str = list.get(mid);
int num = com.compare(str, key);
if (num > 0) {
max = mid - 1; // 中间值大于需要找的值 左移最大值
} else if (num <0) {
min = mid + 1; // 中间值小于需要找的值 右移最小值
} else
return mid; // 中间位置直接找到
}
return -min - 1; // 返回 (-(插入点) - 1)。插入点 :即第一个大于此键的元素索引;
}
[/code]

4、逆转集合中的元素的顺序

static void

reverse(List<?> list)

          反转指定列表中元素的顺序。

static

<T> Comparator<T>

reverseOrder()

          返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序

static

<T> Comparator<T>

reverseOrder(Comparator<T> cmp)

          返回一个比较器,它强行逆转指定比较器的顺序。

 

[code lang="Java"]

// 添加比较器的逆转
TreeSet<String> ts2 = new TreeSet<String>(Collections.reverseOrder(new CollectionsCom_three()));

[/code]

5、线程安全的集合

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。

 

二、Arrays

 

操作数组的工具类,全部都是静态方法。

 

1、把数组变成List集合

 

static

<T> List<T>

asList(T... a)

          返回一个受指定数组支持的固定大小的列表。

 

[code lang="Java"]
//将一个arr数组 转换成 list集合
List<String> list = Arrays.asList(arr);
[/code]

 

好处:可以使用集合的思想和方法来操作数组中的元素。

 
注意:1、将数组变成集合后,不可以使用集合的增删方法,因为数组的长度是固定的。否则会报UnsupprotedOperationException异常。
 
2、如果数组中的元素都是对象,那么变成集合的时候,数组中的元素就直接转成集合中的元素;如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

 

 2、集合转换成数组

 

Object[]

toArray()

          返回包含此 collection 中所有元素的数组。

<T> T[]

toArray(T[] a)

          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

 

注意:

1、当指定类型的数组长度小于集合的长度,该方法内部会创建一个新的数组,长度为集合的长度。当指定类型的数组长度大于集合的长度,就不会新建数组,而是使用传递进来的数组。所以创建一个刚好的数组最优。

[code lang="Java"]
//创建一个刚刚好大小的数组
String [] arr = al.toArray(new String[al.size()]);
[/code]

计算机生成了可选文字:
String [ ] arr 
al. toArray (new String [al. size 
System. out . print In (Arrays . tostring (arr) ) ;
 

2、集合变成数组的好处:限定了对元素的操作。

 
 

项目源码:

https://github.com/IamXiaRui/JavaSE_Demo_Collection/tree/master/xr_java_collection/src/xr_collection_collections

声明:XiaRui's Zone|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Java :集合(5)——集合工具类


在能驾驭的领域 做个自由的行者