黑马程序员--第十七天:Collections 类, Arrays 类

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

 

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/*17-10_15
集合框架工具类。
Collections:
	Collections.sort(list, cmp);
	String s = Collections.max(list,cmp);
	int index = Collections.binarySearch(list, "aahjt");

	fill();
	replaceAll();
	reverse();

	reverseOrder(comparator);

	synchronizedList(list);
	synchronizedMap();
	synchronizedSet();

	shuffle(list);
	swap(list,index1,index2);
*/
public class MyDemo {

	public static void main(String []args){
	
		sortDemo();
	}
	
	public static void sortDemo(){
		List<String> list = new ArrayList<String>();
		Comparator cmp = new StrLenComparator();

		list.add("adf");
		list.add("asdf");
		list.add("addf");
		list.add("aahjt");
		list.add("a");
		
		System.out.println(list);
		
		//Collections.sort(list);
		Collections.sort(list, cmp);
		System.out.println(list);
//		String s = Collections.max(list,cmp);
//		System.out.println(s);
		
		int in = halfSearch(list, "as");
//		int index = Collections.binarySearch(list, "aahjt");
//		System.out.println(list.contains("adf"));
//		
//		System.out.println(index);
		System.out.println(in);
		System.out.println(list);
	}
	
	public static int halfSearch(List<String> list, String key){
		int min = 0, max = list.size()-1;
		Comparator cmp = new StrLenComparator();
		while(min<=max){
			int mid = (min + max) >>1;
			String s = list.get(mid);
			int num = s.compareTo(key);
			int num1 = cmp.compare(list.get(mid), key);
			if(num<0)
				min = mid +1;
			else if(num>0)
				max = mid -1;
			else
				return mid;
		}
		return -min-1;
	}
}

class StrLenComparator implements Comparator<String>{

	@Override
	public int compare(String o1, String o2) {
		// TODO Auto-generated method stub
		return o1.length()-o2.length();
	}	
}


 

/*17-16
Arrays:用于操作数组的工具类。
里面都是静态方法。

asList:将数组变成List集合。
*/

class  
{
	public static void main(String[] args) 
	{
		int[] arr = {1, 2 ,4};
		System.out.println(Arrays.toString(arr));

		String[] arr = {"abc", "ac", "adkj"};

		//把数组变成集合有什么好处?
		/*
		可以使用集合的思想和方法来操作数组元素。

		注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定的。

		contains
		get
		indexOf
		subList();
		如果增删了,会发生 UnsupportedOperationException.
		*/

		List<String> list = Arrays.asList(arr);
		sop("contains: " + list.contains("ac");
		list.add("adf");
		sop(list);

		int[] nums = {2, 3, 5};

		List li = Arrays.asList(nums);
		//List<int []> li = Arrays.asList(nums);

		//如果数组中的元素都是对象,那么变成集合时数组中的元素就直接转成集合中的元素。
		//如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

		sop(li);

		Integer[] integers = {1,2,3};
		List intList = Arrays.asList(integers);
//		List<Integer> intList = Arrays.asList(integers);

		sop(intList);
	}

	public static boolean myContains(String[] arr, String key){
		for(String s : arr){
			if(s.equals(key))
				return true;
		}
		return false;
	}

	public static void sop(Object obj){
		System.out.println(obj);
	}
}


 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*17-17_20
高级for循环:

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

迭代器除了遍历,还可以进行remove集合中的元素动作。

如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。

高级for循环和传统for循环有什么区别。
高级for有一个局限性。必须有被遍历的目标。

建议在遍历数组的时候,还是用传统的for,因为传统for可以对角标进行操作。

JDK1.5 版本的新特性:

方法的可变参数。
在使用是注意,可变参数一定要定义在参数列表最后面。

可变参数:
其实就是上一种数组参数的简写形式。
不用每一次都手动的建立数组对象。只要将要操作的元素作为参数传递即可。
隐式将这些参数封装成了数组。
*/
public class CollectionToArray {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ArrayList<String> al = new ArrayList<String>();
		ArrayList<String> a2 = new ArrayList<String>();
		al.add("ad1");
		al.add("ad2");
		al.add("ad3");
		a2.add("ad3");
		a2.add("ad3");
		a2.add("ad3");
		String[] strs = {"ths","is","string"};
		String[] strs1 = {"strs1,,,","ths","is","string"};
		
		List list = Arrays.asList("this","ida","dsf");//当传入的是多个参数时,会默认以可变参数来处理,把多个参数封装到一个新的数组中。
		list = Arrays.asList(strs,strs1);//当传入的是多个数组是,会吧多个数组同时封装到一个新的数组中。
		list = Arrays.asList("this");//当传入的参数只要一个时,若不是数组,会自动把它封装到数组中
		list = Arrays.asList(strs);//当传入的是一个数组是,会默认的不以可变参数的形式处理,以和之前版本兼容,所以该数组不会再被封装到一个数组中
		
		System.out.println(list);
		System.out.println("this is ");
		/*
		1.指定类型的数组到底要定义多长呢?
		当指定的类型的数组长度小于了集合的size,那么该方法内部就会创建一个长度为集合的size的数组
		当指定类型的数组的长度大于了集合的size,就不会新建数组,而是使用传递进来的数组。
		所以创建一个刚刚好的数组最优
		
		2.为什么要把集合转换成数组?
		为了限定对元素进行操作,不需要进行增删了。
		*/
		
		String[] arr = al.toArray(new String[al.size()]);//toArray(T); 集合转成数组
		System.out.println(Arrays.toString(arr));
	}

}


 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值