一、collections工具类
1、特点:
Collections:是集合框架的工具类,里面的方法都是静态的。
2,方法示例
1)排序(sort方法)
public class CollectionsDemo {
public static void main(String[] args) {
demo_2();
}
public static void demo_2(){
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("aa");
list.add("zzz");
list.add("cba");
list.add("nbaa");
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
运行结果:
2)折半查找(binarySearch方法)
public class CollectionsDemo {
public static void main(String[] args) {
demo_2();
}
public static void demo_2(){
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("aa");
list.add("zzz");
list.add("cba");
list.add("nbaa");
Collections.sort(list);
int index = Collections.binarySearch(list, "cba");
System.out.println("index="+index);
}
}
运行结果:
3)最大值(max方法)
public class CollectionsDemo {
public static void main(String[] args) {
demo_2();
}
public static void demo_2(){
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("aa");
list.add("zzz");
list.add("cba");
list.add("nbaa");
String max = Collections.max(list);
System.out.println("max="+max);
}
}
运行结果:
4)倒序排序(reverseOrder方法)
public class CollectionsDemo {
public static void main(String[] args) {
demo_3();
}
public static void demo_3() {
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new ComparatorByLength()));
ts.add("abc");
ts.add("hahaha");
ts.add("zzz");
ts.add("aa");
ts.add("cba");
System.out.println(ts);
}
运行结果
5)替换元素(replaceAll方法)
public class CollectionsDemo {
public static void main(String[] args) {
demo_4();
}
public static void demo_4() {
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("zhangsan");
list.add("zhaoliu");
list.add("xiaoqiang");
System.out.println(list);
Collections.replaceAll(list, "cba", "nba"); // set(indexOf("cba"),"nba");
System.out.println(list);
}
运行结果:
6)将集合中的所有元素替换为同一元素(fill方法)
public class CollectionsDemo {
public static void main(String[] args) {
demo_4();
}
public static void demo_4() {
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("zhangsan");
list.add("zhaoliu");
list.add("xiaoqiang");
System.out.println(list);
Collections.fill(list, "cc");
System.out.println(list);
}
运行结果:
7)将集合的元素安排在随机的位置上(shuffle方法)
public class CollectionsDemo {
public static void main(String[] args) {
demo_4();
}
public static void demo_4() {
List<String> list = new ArrayList<String>();
list.add("abcde");
list.add("cba");
list.add("zhangsan");
list.add("zhaoliu");
list.add("xiaoqiang");
System.out.println(list);
Collections.shuffle(list);
System.out.println(list);
}
运行结果:
8)将集合变为同步
二、Arrays工具类
1、特点:
Arrays:是集合框架的工具类,里面的方法都是静态的。
2、方法示例
1)toString方法
public class ArraysDemo {
public static void main(String[] args) {
int[] arr = {3,1,5,6,3,6};
System.out.println(Arrays.toString(arr));
}
}
运行结果:
toString方法的经典实现
public static String myToString(int[] a){
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {//中间省略条件判断,提高了效率。
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
2)将数组转成集合(asList方法)
好处:其实可以使用集合的方法操作数组中的元素。
public static void demo_1() {
String[] arr = {"abc","haha","xixi"};
List<String> list = Arrays.asList(arr);
boolean b1 = list.contains("xixi");
System.out.println("list contaisn:="+b1);
System.out.println(list);
}
运行结果:
注意:1,数组的长度是固定的,所以对于集合的增删方法是不可以使用的否则会发生UnsupportedOperationException
2,如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储,如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储。
三、集合转数组(使用的就是Collection接口中的toArray方法)
1,代码示例:
public class ToArray {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
String[] arr = list.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr));
}
}
运行结果:
2,特点
1,toArray方法需要传入一个指定类型的数组, 长度的定义:
如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同size的数组,如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null,所以建议,最后长度就指定为,集合的size。
四、JDK1.5新特性
1,Iterable接口
foreach语句:
* 格式:
* for(类型 变量 :Collection集合|数组)
* {
*
* }
1,代码示例:
List<String> list =new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
for(String s : list){ //简化书写。
System.out.println(s);
}
int[] arr = {3,1,5,7,4};
for(int i : arr){
System.out.println(i);
}
2,传统for和高级for的区别?
传统for可以完成对语句执行很多次,因为可以定义控制循环的增量和条件,高级for是一种简化形式,它必须有被遍历的目标,该目标要是数组,要么是Collection单列集合,
对数数组的遍历如果仅仅是获取数组中的元素,可以使用高级for,如果要对数组的角标进行操作建议使用传统for。
3,foreach遍历map集合代码示例
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(3,"zhagsan");
map.put(1,"wangyi");
map.put(7,"wagnwu");
map.put(4,"zhagsansan");
for(Integer key : map.keySet()){
String value = map.get(key);
System.out.println(key+"::"+value);
}
for(Map.Entry<Integer,String> me : map.entrySet()){
Integer key = me.getKey();
String value = me.getValue();
System.out.println(key+":"+value);
}
2,函数的可变参数
1,特点
其实就是一个数组,但是接收的是数组的元素,自动将这些元素封装成数组。简化了调用者的书写。
注意:可变参数类型,必须定义在参数列表的结尾。
2,代码示例
public class ParamterDemo {
public static void main(String[] args) {
int sum = newAdd(5,1,4,7,3);
System.out.println("sum="+sum);
int sum1 = newAdd(5,1,2,7,3,9,8,7,6);
System.out.println("sum1="+sum1);
}
public static int newAdd(int a,int... arr){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
System.out.println("a="+a);
return sum;
}
运行结果:
3,静态导入
import static java.util.Collections.*;//静态导入,其实到入的是类中的静态成员。
import static java.lang.System.*;
public class StaticImportDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("abc3");
list.add("abc7");
list.add("abc1");
out.println(list);//静态导入后,不再需要通过类名进行调用
sort(list);
out.println(list);
String max = max(list);
System.out.println("max="+max);
}
}
运行结果: