JAVA_JCF(Java Collection Framework)学习笔记(五)

java.util.Colletions 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化实例,就像一个工具类,服务于Java的Collection框架。

常用方法测试:

自定义比较器:

package cn.wangyu.collections;

import java.util.Comparator;

/**
 * @author JiangMinyan
 * 
 * @version 2016/02/18 10:07:51
 */
public class StrLenComparator implements Comparator<String> {

	@Override
	public int compare(String s1, String s2) {

		if (s1.length() > s2.length())
			return 1;
		if (s1.length() < s2.length())
			return -1;
		return s1.compareTo(s2);

	}
}

sort(List<T> list, Comparator<? super T> c)

sort(List<T> list, Comparator<? super T> c) 对实现了Comparable接口的类进行排序。


max(Collection<? extends T> coll)

max(Collection<? extends T> coll, Comparator<? super T> comp)   将List集合中的对象的最大值找出(通过对象的comparatorTo()方法进行比较)


replaceAll(List<T> list, T oldVal, T newVal)   将list集合中指定的对象


synchronizedList(List<T> list)   

synchronizedList(List<T> list, Object mutex)  返回线程同步的list集合

package cn.wangyu.collections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

import org.junit.Test;

/**
 * @author JiangMinyan
 * 
 * @version 2016/02/18 9:51:22
 */
public class CollectionsTest {

	@Test
	public void testCollections() {

//		sortDemo();
//		maxDemo();
//		binaryDemo();
//		replaceAllDemo();
		reverseOrderDemo();
	}

	public void sortDemo() {

		List<String> list = new ArrayList<String>();

		list.add("adas");
		list.add("h");
		list.add("exe");
		list.add("bsxsewq");
		list.add("bsxs");

		// 排序前
		sop(list);

		// 默认按照String自然顺序排序
		// Collections.sort(list);
		// 自定义StrLenComparator比较器
		Collections.sort(list, new StrLenComparator());

		// 排序后
		sop(list);

	}

	public void maxDemo() {
		
		List<String> list = new ArrayList<String>();

		list.add("adas");
		list.add("h");
		list.add("exe");
		list.add("bsxsewq");
		list.add("bsxs");

		// 默认按照String自然顺序排序
		// Collections.sort(list);
		// 自定义StrLenComparator比较器
		Collections.sort(list, new StrLenComparator());

		// max()
//		String max = Collections.max(list);
		String max = Collections.max(list, new StrLenComparator());
		sop("max : " + max);
	}
	
	public void binaryDemo(){
		
		List<String> list = new ArrayList<String>();

		list.add("adas");
		list.add("h");
		list.add("exe");
		list.add("bsxsewq");
		list.add("bsxs");
		
		sop(list);
		
//		int index = Collections.binarySearch(list, "h");
		int index = halfSearch(list, "adas");
		sop("index:"+index);
	}
	
	public int halfSearch(List<String> list, String key){
		
		int max, min, mid;
		max = list.size()-1;
		min = 0;
		
		while(min<=max){
		
			mid = (min + max) >> 1;
		
			String str = list.get(mid);
			
			int num = str.compareTo(key);
			if (num>0) 
				max = mid - 1;
			else if(num<0)
				min = mid + 1;
			else
				return mid;
		}
		
		return -min-1;
	}
	
	public void replaceAllDemo(){
		
		List<String> list = new ArrayList<String>();

		list.add("adas");
		list.add("h");
		list.add("exe");
		list.add("bsxsewq");
		list.add("bsxs");
		
		sop(list);
		
		Collections.replaceAll(list, "h", "ha");
		
		sop(list);
		
		Collections.reverse(list);
		
		sop(list);
		
	}
	
	public void reverseOrderDemo(){
		
		//Collections.reverseOrder()可以将默认的排序器逆转
		//Collections.reverseOrder(new StrLenComparator())
		TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
		
		ts.add("adas");
		ts.add("h");
		ts.add("exe");
		ts.add("bsxsewq");
		ts.add("bsxs");
		
		Iterator<String> iterator = ts.iterator();
		while(iterator.hasNext()){
			
			String str = iterator.next();
			System.out.println(str);
		}
		
	}
	
	public void synchronizedListDemo(){
		
		List<String> list = new ArrayList<String>();

		list.add("adas");
		list.add("h");
		list.add("exe");
		list.add("bsxsewq");
		list.add("bsxs");
		
		Collections.synchronizedList(list);
		
		sop(list);
	}

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

-----------------------------------------------------华丽的分割线-----------------------------------------------------

Arrays: 操作数组的工具类


asList:将数组变成list集合。

数组--->集合:Arrays.asList();

package cn.wangyu.collections;

import java.util.Arrays;
import java.util.List;

import org.junit.Test;

/**
 * @author JiangMinyan
 * 
 * @version 2016/02/18 14:14:16
 */
public class ArraysTest {

	@Test
	public void arraysTest() {

		String[] arr = { "csde", "dsd", "es", "kg" };

		// 把数组编程list有什么好处 ?
		/*
		 * 可以使用集合的思想和方法来操作数组中的元素。
		 * 
		 * 注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定的。 可以使用:contains get indexOf等方法
		 * 
		 * 如果你调用增删操作会抛出UnsupportedOperationException
		 */
		List<String> list = Arrays.asList(arr);
		sop("contains:" + list.contains("es"));
		// list.add("qq");//java.lang.UnsupportedOperationException

		// -------------华丽的分割线--------------------//

		int[] nums = { 2, 4, 23 };

		List<int[]> li = Arrays.asList(nums);
		/*
		 * 注意: 如果数组中的元素都是对象,那么变成集合时,数组中元素就直接转成集合中的元素
		 * 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
		 */
		sop(li);

		// -------------华丽的分割线--------------------//

		Integer[] numes = { 2, 4, 23 };

		List<Integer> lists = Arrays.asList(numes);
		/*
		 * 注意: 如果数组中的元素都是对象,那么变成集合时,数组中元素就直接转成集合中的元素
		 * 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
		 */
		sop(lists);
	}

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


Collection中的toArray()

集合--->数组 

package cn.wangyu.collections;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Test;

/** 
 * @author JiangMinyan
 *  集合-->数组
 * 				Collection的toArray()
 * @version 2016/02/18 14:38:19
 */
public class CollectionsToArrayTest {

	@Test
	public void testCollectionsToArray(){
		
		List<String> list = new ArrayList<String>();
		
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		list.add("abc4");
		
		/*
		 1 指定类型的数组到底要定义多长呢?
		 当指定类型的数组长度小于了集合的size,那么该方法的内部会创建一个新的数组长度为集合的size
		 当指定类型的数组长度大于了集合的size,就不会新创建数组。二是使用传递进来的数组。
		 所以创建一个刚刚好的数组为佳。
		 
		 2为什么要将集合变成数组?
		 为了限定对集合的操作。
		 */
		String[] array = list.toArray(new String[list.size()]);
		sop(Arrays.toString(array));
		
	}
	
	public void sop(Object obj){
		System.out.println(obj);
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值