Java集合框架5——集合工具类的使用

Demo1:常用方法

//自定义比较器,按长度排序,短的在前面
class StrLenComparator implements Comparator<String> {
	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);
	}
}

public class CollectionsDemo {
	public static void main(String[] args) {
		sortDemo();		//sort排序
		binarySearchDemo();	//binarySearch二分查找
		fillAndReplaceAllDemo();	//fill全部替换,replaceAll,替换某个元素
		shuffleDemo();	//shuffle打乱排序
		reverseOrderDemo();	//reverseOrder按原来的顺序倒序排序
	}
	public static void sortDemo() {
		List<String> list = new ArrayList<String>();
		
		list.add("abcd");
		list.add("aaa");
		list.add("zz");
		list.add("kkkkk");
		list.add("qq");
		list.add("z");
		
		//原来的顺序
		System.out.println(list);	//[abcd, aaa, zz, kkkkk, qq, z]
		
		//自然顺序排序
		Collections.sort(list);
		System.out.println(list);	//[aaa, abcd, kkkkk, qq, z, zz]
		
		//根据自定义的比较器排序,按长度排序
		Collections.sort(list, new StrLenComparator());
		System.out.println(list);	//[z, qq, zz, aaa, abcd, kkkkk]
	}
	
	public static void binarySearchDemo() {
		List<String> list = new ArrayList<String>();
		
		list.add("abcd");
		list.add("aaa");
		list.add("zz");
		list.add("kkkkk");
		list.add("qq");
		list.add("z");
		
		Collections.sort(list);
		System.out.println(list);	//[aaa, abcd, kkkkk, qq, z, zz]
		
		//binarySearch如果有返回该对象的索引
		int index = Collections.binarySearch(list, "abcd");
		System.out.println(index);	//1
		
		//binarySearch如果找不到,返回要查找对象在原集合中插入位置的索引的负数再减1
		//aaac在原集合中应该在1位置插入,返回-1再减1,也就是-2
		int index2 = Collections.binarySearch(list, "aaac");
		System.out.println(index2);	//-2
		
		//binarySearch也可以按我们自定义顺序排好后再查找
		Collections.sort(list, new StrLenComparator());
		System.out.println(list);	//[z, qq, zz, aaa, abcd, kkkkk]
		int index3 = Collections.binarySearch(list, "abcd",new StrLenComparator());
		System.out.println(index3);	 //4
	}
	
	public static void fillAndReplaceAllDemo() {
		List<String> list = new ArrayList<String>();
		
		list.add("abcd");
		list.add("aaa");
		list.add("zz");
		list.add("aaa");
		list.add("kkkkk");
		list.add("qq");
		list.add("z");
		
		//replaceAll,将指定元素替换
		System.out.println(list);	//[abcd, aaa, zz, aaa, kkkkk, qq, z]
		Collections.replaceAll(list, "aaa", "pp");	
		System.out.println(list);	//[abcd, pp, zz, pp, kkkkk, qq, z]
		
		//fill,整个集合都替换
		Collections.fill(list, "xx");
		System.out.println(list);	//[xx, xx, xx, xx, xx, xx, xx]
	}
	
	public static void shuffleDemo() {
		List<String> list = new ArrayList<String>();
		
		list.add("abcd");
		list.add("aaa");
		list.add("zz");
		list.add("kkkkk");
		list.add("qq");
		list.add("z");
		
		//shuffle将集合顺序打乱,随机排列,每次运行结果会不一样
		System.out.println(list);	//[abcd, aaa, zz, kkkkk, qq, z]
		Collections.shuffle(list);
		System.out.println(list);	//[kkkkk, qq, aaa, zz, z, abcd]
	}
	
	public static void reverseOrderDemo() {
		
		TreeSet<String> ts = new TreeSet<String>();

		ts.add("abcde");
		ts.add("aaa");
		ts.add("k");
		ts.add("cc");

		Iterator it = ts.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		/*原来按自然顺序排列
		aaa
		abcde
		cc
		k
		 */
		
		TreeSet<String> ts2 = new TreeSet<String>(Collections.reverseOrder());
		ts2.add("abcde");
		ts2.add("aaa");
		ts2.add("k");
		ts2.add("cc");
		
		Iterator it2 = ts2.iterator();
		while(it2.hasNext()) {
			System.out.println(it2.next());
		}
		/*Collections.reverseOrder()按自然顺序倒着排列
		k
		cc
		abcde
		aaa
		 */
		
		TreeSet<String> ts3 = new TreeSet<String>(Collections.reverseOrder(new StrLenComparator()));
		ts3.add("abcde");
		ts3.add("aaa");
		ts3.add("k");
		ts3.add("cc");

		Iterator it3 = ts3.iterator();
		while(it3.hasNext()) {
			System.out.println(it3.next());
		}
		/*Collections.reverseOrder(new StrLenComparator())
		 * 按自定义比较器倒序排(原来是从短到长)
		abcde
		aaa
		cc
		k
		 */
	}
}


Demo2:数组转换成集合

public class ArrayToList {
	public static void main(String[] args) {
		String[] arr = {"abc", "cc", "kkkk"};
		
		List<String> list = Arrays.asList(arr);
		System.out.println(list);	//[abc, cc, kkkk]  
		
		/*
		 * 把数组变成list集合有什么好处?
		 * 可以使用集合的思想和方法来操作数组中的元素。
		 * 比如要查找数组中是否存在某个元素,就可以用集合的方法
		 */
		System.out.println("contains:" + list.contains("cc"));	//contains:true
		
		/*
		 * 注意:将数组变成集合,不可以使用集合的增删方法。
		 * 否则会抛出UnsupportedOperationException异常
		 */
//		list.add("qq");	//抛出异常
		
		
		/*
		 * 如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
		 * 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
		 */
		int[] nums = {2, 4, 5};
		List<int[]> li = Arrays.asList(nums);
		System.out.println(li);		//[[I@2f0f94a0]
		
		Integer[] nums2 = {2,4,5};
		List<Integer> li2 = Arrays.asList(nums2);
		System.out.println(li2);	//[2, 4, 5]
	}
}

Demo3:集合转换成数组

public class CollectionToArray {
	public static void main(String[] args) {
		ArrayList<String> al = new ArrayList<String>();

		al.add("abc1");
		al.add("abc2");
		al.add("abc3");
		/*
		1,指定类型的数组到底要定义多长呢?
		当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
		当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
		所以创建一个刚刚好的数组最优。
		
		2,为什么要将集合变数组?
		为了限定对元素的操作。不需要进行增删了。
		*/
		String[] arr = al.toArray(new String[0]);
		System.out.println(Arrays.toString(arr));	//[abc1, abc2, abc3]
		
		String[] arr1 = al.toArray(new String[al.size()]);
		System.out.println(Arrays.toString(arr1));	//[abc1, abc2, abc3]
		
		String[] arr2 = al.toArray(new String[5]);
		System.out.println(Arrays.toString(arr2));	//[abc1, abc2, abc3, null, null]
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值