Collections和Arrays工具类

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

Collections

1 Collections作为一个工具类,方法都是静态的,里面都是共有数据
要使用Collections工具类,必须先导入static java.Collections.*
有一堆元素不需要保证唯一,但是又要进行排序了
只有List集中不需要保证唯一,但是,List集合又不能进行排序,这时就用到Collections里面的方法了

public static<T extends Comparable<? super T>> void sort(List<T> list)
解读:T extends Comparable<? super T>
传入的T一定要具备比较性是Comparable的子类同时Comparable也有自己的泛型,里面可以传入T或者T的子类

Collections.sort(Collection<> list)    可以传入带有比较方法的集合
Collections.sort(Collection<> l,Compatator cmp)    可以新建一个比较器,传到sort()里面   这种方法是新建一个比较器传进来,实现Comparator类,然后复写compare方法

/*
有一堆元素不需要保证唯一,但是又要进行排序了
*/

import java.util.*;
class CollectionsDemo
{
	public static void main(String[] args)
	{
		sortDemo();
	}

	public static void sortDemo()
	{
		List<String> list=new ArrayList<String>();
		list.add("a");
		list.add("cb");
		list.add("ebc");
		list.add("abcd");
		list.add("hbcde");
		Collections.sort(list,new StrLenComparator());
		sop(list);
	}
	
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

class StrLenComparator implements Comparator<String>
{
	public int compare(String s1,String s2)
	{
		int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
		if(num==0)
			return s1.compareTo(s2);
		return num;
	}
}

1.1)Collections.max();返回集合中最大值 也是可以自定义比较器跟上面一样

1.2)Collections.biarnySearch(List list,Object obj); 返回的是集合里相应数的角标,如果没有找到就返回-min-1    
输入的数组一定要是List集合,因为二分法查找一定要是有序的数组)_

1.3)Collections.fill(List list);可以将List集合中所有元素替换成指定元素
Collections.replaceAll(List,"旧的","新的");可以将List集中替换指定的元素

1.4) 强行逆转:Collections.reverseOrder("比较器")  逆转比较顺序

1.5) 把集合数据反转Collections.reverse(ArrayList list)

1.6)Collections.swap(List,2,3);只有List能用,因为调用角标,把2,3角标的值调换

1.7)Collections.shuffle(List list); 只能List能用,得到随机数,扑克牌用到
集合变数组:
Collection接口中的toArray方法
ArrayList<String> list=new ArrayList<String>();
al.toArray(new String[(al.size()]);//把集合变成数组后保存在new String
[al.size()]长度的数组中,
当指定类型的数组长度大于了集合的size,那么该方法内部会创建一个新的数组,长度为集合的size,当指定类型的数组长度大于了集合的siez,就不会新创建数组了,而是会使用传递进来的数组,所以最好创建一个刚刚好的数组

为什么要对集合变成数组?
是为了对元素的操作进行限定,不能增删

2Arrays
要使用工具类,必须先导入static java.Array.*
Arrays:用于操作数组的工具类,里面都是静态方法
有二分查找,直接调用,不用自己写了,集合有二分查找,数组也有二分查找等操作


2.1) Arrays.asList  将数组变成Llist集合  
List<String> list=Arrays.asList(arr);
把数组变成List集合有什么好处?
可以使用集合的思想和方法来操作数组中的元素,

注意:将数组变成集合,不可以使用集合的增删方法
因为数组的长度是固定,如果你增删会发生UnsupportedOperationException
可以使用:contains()  get()  indexOf()  subList()

注意:数组变成元素如果是基本数据类型:
int[] num={2.3.5}
List<int[]> li=Arrays.asList(num); //注意泛型的表现形式

Integer[] nums={2,3,5};
List<Integer> li=Arrays.asList(num); //注意泛型

String[] arr={"a","w","b"","c"};   //字符串本身就是一个对象
List<String> li=Arrays.asList(arr);
如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转成集合中的元素,如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在


3 高级fo循环
格式:
for(数据类型 变量 : 被遍历的集合(Collection)或者数组)
{

System.out.println(变量);
}

例子:ArrayList<String> lis=new ArrayList<String>();
for(String s : lis)
{
	System.out.println(s);
}

3.1)对集合进行遍历
只能获取集合元素,但是不能对集合进行操作

3.2)局限性:
迭代器除了遍历,还可以进行remove集合中的元素的动作
如果是用ListIterator,还可以在遍历过程中进行增删改查动作

3.3)必须有个被遍历的目标
   比如我要打印hellwor一百次,怎么写呢?数组中没有hello,用传统for循环可以打印,但是高级for循环就不行

3.4)可变参数:在使用时注意可变参数一定要定义在参数列表最后面
可变参数其实就是一种数组的参数简写形式
不用每一次都手动的建立数组对象,只要将要操作的元素作为参数传递即可,隐式将这些参数封装成了数组
show("haha",2,3,4,5,6)//后面的数组传多少个都能打印出来
public static void show(String s,int...arr)

3.5)静态导入:import static java.util.Array.*;//导入的是Arrays这个类中的所有静态成员,导入之后可以省略类名,直接使用里面的方法 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值