黑马程序员——集合框架工具类



 

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

——————————————————————————————————————————————— 



25、集合框架 ---- 工具类

|——Collections
Collections.sort(list集合);
自定义排序方法
————————————————————————————————————————————————————

public static void mysort(List list) {
for (int i = 0; i < list.size()-1; i++) {
for (int j = i+1; j < list.size(); j++) {
if(list.get(i).compareTo(list.get(j))>0){
/* String tmp = list.get(i);   //get方法是list特有的,参数值是index
list.set(i, list.get(j));
list.set(j, tmp); */

Collections.swap(list,i,j);
}
}
}

}

Colletions.sort(list集合,比较器);
 
|--Collections.BinarySearch(List集合,key); 二分查找法
返回值是一个索引值。如果集合中没有这个key,就会返回一个负数
负号表示没找到,值表示插入的位置-1
 
|--Collctions.reverseOrder();
public static Comparator reverseOrder()
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 
的自然顺序。(自然顺序是通过对象自身的 compareTo 方法强行排序的。)此方法允许使用单个语句,以逆自然顺序对实现了 Comparable 
接口的对象 collection(或数组)进行排序(或维护)。例如,假设 a 是一个字符串数组。那么:
Arrays.sort(a, Collections.reverseOrder());
将按照逆字典(字母)顺序对数组进行排序。
返回的比较器是可序列化的。 


|--Collections.reverseOrder(比较器)
public static Comparator reverseOrder(Comparator cmp)
返回一个比较器,它强行逆转指定比较器的顺序。如果指定比较器为 
null,则此方法等同于 reverseOrder()(换句话说,它返回一个比较器,该比较器将强行逆转实现了 Comparable 接口的对象 collection 
的自然顺序)。 
返回的比较器是可序列化的(假设指定的比较器也是可序列化的或者为 null)。 




|--枚举和集合的相互转换
public static Enumeration enumeration(Collection c)
返回一个指定 collection 上的枚举。此方法提供与遗留 API 的互操作性,遗留 API 需要一个枚举作为输入。
 
public static ArrayList list(Enumeration e)
返回一个数组列表,它按返回顺序包含指定枚举返回的元素。此方法提供返回枚举的遗留 API 与需要 collection 的新 API 
之间的互操作性。

|--将非同步集合转为同步集合
public static List synchronizedList(List list)
返回指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成所有对底层实现列表的访问。
在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步: 


 List list = Collections.synchronizedList(new ArrayList());
 ...
 synchronized(list) {
 Iterator i = list.iterator(); // Must be in synchronized block
 while (i.hasNext())
 foo(i.next());
 }
不遵从此建议将导致无法确定的行为。 
如果指定列表是可序列化的,则返回的列表也将是可序列化的。 




|——Arrays 数组工具类
对数组进行二分查找的前提是数组是有序的
注-->注--> |--asList方法  将数组转成集合
public static List asList(T... a)
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 
一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。 
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素: 


List stooges = Arrays.asList("Larry", "Moe", "Curly");


|---转换成List集合后,可以进行更多的操作
 
注-->注-->数组的长度是固定的,所以对于集合的增删方法是不可以使用的,否则会出现不支持的操作异常
 
|---如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储;
如果数组中的元素是基本数据类型,那么转成集合时,直接将该数组作为集合中的元素进行存储

数组中元素是对象的时候
——————————————————————————————————————————————————————————
String []arr_str = {"sed","sge","gdd","abc"};
List list = Arrays.asList(arr_str);
System.out.println(list);  //打印结果是[sed, sge, gdd, abc]

list.toString();方法调用的是AbstractCollection类的toString方法
注意:这种直接打印集合的方式不推荐。开发中还是要用到迭代器

数组中元素是基本数据类型的时候
————————————————————————————————————————————————————————— 
int [] arr = {12,42,24,4,64,78};
List list = Arrays.asList(arr);
System.out.println(list);//打印结果是 [[I@dc8569]


 
|--集合转成数组
collection.toArray(指定类型的数组);
例如:
List  list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
String [] arr = list.toArray(new String[list.size()]); //注意这里传入指定类型的数组的长度。
// 如果大于List集合的长度,直接就会以null添加进去

 

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

——————————————————————————————————————————————— 

你可能感兴趣的:(黑马程序员——集合框架工具类)