------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Arrays概述
我们都知道,数组的可用方法,比如比较大小,查找某个元素等常见方法,因此Java为我们提供了一个工具类Arrays,主要用于扩展数组的功能。
Arrays类常用的方法:
static <T> list<T> asList(T [] t)接受一个数组,返回一个长度固定的指定类型的列表。
static int binarySearch(T [] t, T key)接受一个指定类型的数组,并检查该数组是否包含该指定的元素。
static T[] copyof(T[],int length)复制指定的数组,使其副本具有指定的长度。
static T[] copyofRange(T[],int start,int end)将数组指定的长度复制到一个新的数组。
static T[] fill(T[],int start ,int end T t)将t复制到指定范围的数组中去。
static T[] sort(T [])对指定的数组进行升序排序。
static T[] sort(T[] t,int start,int end)对数组的指定范围内进行排序。
static T[] toString(T [] ),返回指定数组的字符串表现形式。
static <T>List<T> asArray(T[] t)返回一个固定长度
Arrays实例一
import java.util.*;
class JavaCollection1_41
{
public static void main(String[] args)
{
Integer[] arr={1,23,221,412,43,89,67};
/*sop(Arrays.binarySearch(arr,23));
int[] temp=Arrays.copyOf(arr,2);
for(int i=0;i<temp.length;i++)
{
sop(temp[i]);
}
int[] arrtemp=Arrays.copyOfRange(arr,2,4);//包含头部,不包含尾部
for(int i=0;i<arrtemp.length;i++)
{
sop(arrtemp[i]);
}
/*Arrays.fill(arr,2,4,5);
for(int i=0;i<arr.length;i++)
{
sop(arr[i]);
}
for
*/
sop("**************");
/*Arrays.sort(arr);
for(int i=0;i<arr.length;i++)
{
sop(arr[i]);
}
*/
/*把数组转换成集合有什么好处呢??
可以按照集合的思想来操作数组。
注意事项:
因为数组的长度是一定的。所以将数组转换成集合时,集合的大小也是固定的,不能使用add,remove方法,但是其他的方法还是可以使用。
Arrays.sort(arr,2,4);
for(int i=0;i<arr.length;i++)
{
sop(arr[i]);
}
*/
List<Integer> list=Arrays.asList(arr);
sop(list);
sop(list.contains(23));
//注意事项,如果数组中存储的是兑现,那么使用asList()方法转成集合时,数组中对应的对象就会变成集合中的对象。
//如果数组中存储的是基本数据类型,那么在使用asList()方法转成集合时,数组中本身将作为一个整体变成集合中的一个对象。
int[] nums={1,23,434,54,2};
List<int[]> list2=Arrays.asList(nums);
sop(list2);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
Arrays实例二:
/*集合变成数组
Collection接口中的toArray()方法。
*/
import java.util.*;
class JavaCollection1_42
{
public static void main(String[] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("xt");
al.add("x");
al.add("z");
al.add("aa");
al.add("zf");
//注意事项:1如果我们传入的数组的长度小于集合的size(),那么系统就会自动创建一个长度为size()的数组,并返回这个数组。
//2如果传入的数组的长度大于集合的size(),那么系统就会使用传入的数组,而大于集合长度的地方为null.
//所以最好的方法是我们传入的字符串数组的长度为集合的size();
String[] arr=al.toArray(new String[1]);
System.out.println(Arrays.toString(arr));
//2为何要将集合转换成数组?
//因为集合可以对其进行增删,还可以修改,但是数组的大小是一定,我们不能对其进行增删,所以这是为了限定对元素的操作。
}
}
注意:集合转换陈数组是使用Collections工具类中的ToArray方法, 数组转换成集合是使用Arrays工具类中的asList()方法。
高级for循环
凡是支持迭代的集合都可以支持高级for循环
传统for循环和高级for循环的区别?
1高级for循环必须有被遍历的目标,建议在遍历数组的时候,使用传统的for,因为传统的for可以定义角标。另外高级for循环不能够只能够查看,而且不能对数组或者集合进行操作。
高级for循环的语法格式:
for(集合类型 变量名 :能够遍历的集合和数组)
高级for循环实例
import java.util.*;
class JavaCollection1_43
{
public static void main(String[] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("afd");
al.add("efg");
al.add("acd");
al.add("a");
//注意这里的s就相当于是一个指针,开始指向afd,然后每遍历一次,指针便向后移动一格,而我们在s="fff"只是修改了s的引用,并没有修改al中的值。所以打印数组的结果不会变。
//高级for循环遍历ArrayList集合。
for(String s: al)
{
s="fff";
//System.out.println(s);
}
System.out.println(al);
//高级for循环遍历数组
int[] arr={1,23,321,434,312};
for(int i : arr)
{
System.out.println(i);
}
System.out.println("**************");
HashMap<Integer,String> hm=new HashMap<Integer,String>();
hm.put(1,"2");
hm.put(2,"3");
hm.put(3,"4");
Set<Integer> keyset=hm.keySet();
for(Integer i :keyset)
{
System.out.println(i+"-"+hm.get(i));
}
System.out.println("**************");
for(Map.Entry<Integer,String> me :hm.entrySet())
{
System.out.println(me.getKey()+"-"+me.getValue());
}
}
}
导入静态包
在写代码时,往往需要多次调用工具类中的方法,这样就显得很麻烦,而为了解决这种问题,我们就采用导入静态方法包的方法来简化代码的书写。
示例如下:
import static java.util.Arrays.*;
import java.util.*;
class JavaCollection1_45
{
public static void main(String[] args)
{
Integer[] arr={23,21,22,43,5};
//由于我们导入了静态工具类,那么我们这里就可以直接使用Arrays的asList()方法,而不需要写全称。
List<Integer> al=asList(arr);
/*System.out.println(toSting(arr));注意这里我们不能直接使用toString()方法,因为这里jvm会默认以为是Object的方法,而不是Arrays的toString(),所以这里我们使用方法的时候,必须带上包名。*/
for(Integer i :al)
{
System.out.println(i);
}
}
}