为了编程人员的方便及处理数据的安全性,Java特别提供了两个非常有用的工具类:
一、Collections
1、Collections类的特点:
集合框架的工具类。里面定义的都是静态方法。
2、Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
Collections是集合框架中的一个工具类。该类中的方法都是静态的
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
3、Collections的常用方法
1)排序
2)取最大最小值
3)二分查找
4)替换
使用指定元素替换指定列表中的所有元素
5)反转
6)线程同步
4、对这些方法的演示如下:
import java.util.*;
class CollectionsDemo
{
public static void main(String[] args)
{
sortDemo();
}
public static void binarySearchDemo()
{
List
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
Collections.sort(list,new StrLenComparator());
sop(list);
int index = Collections.binarySearch(list,"aaaa");
sop("index="+index);
}
public static void maxDemo()
{
List
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
Collections.sort(list);
sop(list);
String max = Collections.max(list/*,new StrLenComparator()*/);
sop("max="+max);
}
public static void sortDemo()
{
List
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
sop(list);
Collections.sort(list);
//Collections.sort(list,new StrLenComparator());
//Collections.swap(list,1,2);
sop(list);
}
public static void replaceAllDemo()
{
List
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
sop(list);
Collections.replaceAll(list,"aaa","pp");
sop(list);
Collections.reverse(list);
sop(list);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class StrLenComparator implements Comparator
{
public int compare(String s1,String s2)
{
if(s1.length()>s2.length())
return 1;
if(s1.length()
return -1;
return s1.compareTo(s2);
}
}
二、Arrays
1、特点:
用于操作数组的工具类。里面都是静态方法。
2、Arrays类的一个非常重要的方法
public static
该方法将返回一个受指定数组支持的固定大小的列表
3、把数组变成list集合有什么好处?
可以使用集合的思想和方法来操作数组中的元素。
注意:
1) 将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定。如果你增删。那么会反生UnsupportedOperationException。
2) 如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素; 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
4、示例代码如下:
import java.util.*;
class ArraysDemo
{
public static void main(String[] args)
{
int[] arr = {2,4,5};
System.out.println(Arrays.toString(arr));
String[] arr = {"abc","cc","kkkk"};
List
//list.add("qq");//UnsupportedOperationException,
sop(list);
//int[] nums = {2,4,5};
Integer[] nums = {2,4,5};
sop(li);
}
public static boolean myContains(String[] arr,String key)
{
for(int x=0;x
{
if(arr[x].equals(key))
return true;
}
return false;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
三、集合变数组
1、实现的方法
使用Collection接口中的toArray()方法。
2、指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
所以创建一个刚刚好的数组最优。
3、为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。
4、示例代码如下:
import java.util.*;
class CollectionToArray
{
public static void main(String[] args)
{
ArrayList
al.add("abc1");
al.add("abc2");
al.add("abc3");
String[] arr = al.toArray(new String[al.size()]);
System.out.println(Arrays.toString(arr));
}
}