黑马程序员————集合2(day17)

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

 

 

 

集合2

l  Collections – sort

l  Collections – max

l  Collections – binarySearch

l  Collections – 替换反转

l  Collections – reverseOrder

l  Arrays

l  集合转成数组

l  增强for循环

l  可变参数

l  静态导入

 

 

Collections – sort

示例:

import java.util.*;

class CollectionsDemo {
	public static void main(String[] args) {
		sortDemo();
	}

	public static void sortDemo() {
		List<String> list = new ArrayList<String>();
		list.add("abcd");
		list.add("aaa");
		list.add("c");
		list.add("ffff");
		list.add("dd");
		list.add("bbbbbb");

		sop("原顺序:" + list);
		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) {
		if (s1.length() > s2.length())
			return 1;
		if (s1.length() < s2.length())
			return -1;
		return s1.compareTo(s2);
	}
}


 

运行结果:原顺序:[abcd, aaa, c, ffff, dd, bbbbbb]

[c, dd, aaa, abcd, ffff, bbbbbb]

 

 

Collections – max

示例:

import java.util.*;

class CollectionsDemo2 {
	public static void main(String[] args) {
		maxDemo();
	}

	public static void maxDemo() {
		List<String> list = new ArrayList<String>();
		list.add("abcd");
		list.add("aaa");
		list.add("c");
		list.add("ffff");
		list.add("dd");
		list.add("bbbbbb");

		Collections.sort(list);// 排序
		sop(list);
		String max = Collections.max(list);// , new StrLenComparator());// 取最值
		sop("max=" + max);
	}

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

// 按字符串长度进行排序
class StrLenComparator1 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);
	}
}


 

运行结果:[aaa, abcd, bbbbbb, c, dd, ffff]

max=ffff

 

 

Collections – binarySearch

示例:

import java.util.*;

class CollectionsDemo3 {
	public static void main(String[] args) {
		sortDemo();
	}

	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, new StrLenComparator3());

		sop(list);

		// int index = Collections.binarySearch(list,"aaaa");
		// int index = halfSearch(list,"cc");
		int index = halfSearch2(list, "aaaa", new StrLenComparator3());
		sop("index=" + index);
	}

	public static int halfSearch(List<String> list, String key) {
		int max, min, mid;
		max = list.size() - 1;
		min = 0;

		while (min <= max) {
			mid = (max + min) >> 1;// /2;

			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 static int halfSearch2(List<String> list, String key,
			Comparator<String> cmp) {
		int max, min, mid;
		max = list.size() - 1;
		min = 0;

		while (min <= max) {
			mid = (max + min) >> 1;// /2;

			String str = list.get(mid);

			int num = cmp.compare(str, key);
			if (num > 0)
				max = mid - 1;
			else if (num < 0)
				min = mid + 1;
			else
				return mid;
		}
		return -min - 1;
	}

	public static void maxDemo() {
		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);
		sop(list);
		String max = Collections.max(list/* ,new StrLenComparator() */);
		sop("max=" + max);
	}

	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");

		sop(list);

		// Collections.sort(list);
		Collections.sort(list, new StrLenComparator3());
		// Collections.swap(list,1,2);
		sop(list);
	}

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

class StrLenComparator3 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);
	}
}


 

运行结果:[abcd, aaa, zz, kkkkk, qq, z]

[z, qq, zz, aaa, abcd, kkkkk]

 

 

Collections –替换反转

示例:

import java.util.*;

class CollectionsDemo4 {
	public static void main(String[] args) {
		replaceAllDemo();
	}

	public static void replaceAllDemo() {
		List<String> list = new ArrayList<String>();
		list.add("abcd");
		list.add("aaa");
		list.add("zz");
		list.add("kkkkk");

		sop(list);
		Collections.replaceAll(list, "aaa", "pp");// 把aaa变为pp
		sop(list);
	}

	public static void fillDemo() {
		List<String> list = new ArrayList<String>();
		list.add("abcd");
		list.add("aaa");
		list.add("zz");
		list.add("kkkkk");

		sop(list);
		Collections.fill(list, "pp");// 将list集合中全部变成pp
		sop(list);
	}

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


 

运行结果:[abcd, aaa, zz, kkkkk]

[abcd, pp, zz, kkkkk]

 

 

Collections – reverseOrder

示例:

import java.util.*;

class CollectionsDemo5 {
	public static void main(String[] args) {
		orderDemo();
	}

	public static void orderDemo() {
		TreeSet<String> ts = new TreeSet<String>(
				Collections.reverseOrder(new StrLenComparator4()));

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

		Iterator it = ts.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}

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

class StrLenComparator4 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);
	}
}


 

运行结果:abcde

aaa

cc

k

 

 

Arrays

Arrays:

用于操作数组的工具类,里面都是静态方法。

asList:

将数组变成list集合

 

示例:

import java.util.*;

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

		String[] arr = { "abc", "cc", "kkkk" };

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

		// sop(list);

		// int[] nums = {2,4,5};
		Integer[] nums = { 2, 4, 5 };

		List<Integer> li = Arrays.asList(nums);

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

	public static boolean myContains(String[] arr, String key) {
		for (int x = 0; x < arr.length; x++) {
			if (arr[x].equals(key))
				return true;
		}
		return false;
	}

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


 

运行结果:[2, 4, 5]

 

 

集合转成数组

示例:

import java.util.*;

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[al.size()]);

		System.out.println(Arrays.toString(arr));
	}
}


 

运行结果:[abc1, abc2, abc3]

 

 

增强for循环

高级for循环格式:

for(数据类型变量名 :被遍历的集合(Collection)或者数组){

        

}

 

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

 

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

 

传统for和高级for有什么区别呢?

高级for有一个局限性。必须有被遍历的目标。

建议在遍历数组的时候,还是希望使用传统for。因为传统for可以定义脚标。

 

示例:

import java.util.*;

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

		al.add("abc1");
		al.add("abc2");
		al.add("abc3");

		// 高级for循环,(数据类型 变量名 : 被遍历的集合(Collection)或者数组)
		for (String s : al) {
			// s = "kk";//这里不能改变集合里的值
			System.out.println(s);
		}

		System.out.println(al);
		/*
		 * Iterator<String> it = al.iterator();
		 * 
		 * while(it.hasNext()) { System.out.println(it.next()); }
		 */

		int[] arr = { 3, 5, 1 };

		for (int x = 0; x < arr.length; x++) {
			System.out.println(arr[x]);
		}
		for (int i : arr) {
			System.out.println("i:" + i);
		}

		HashMap<Integer, String> hm = new HashMap<Integer, String>();

		hm.put(1, "a");
		hm.put(2, "b");
		hm.put(3, "c");

		Set<Integer> keySet = hm.keySet();
		for (Integer i : keySet) {
			System.out.println(i + "::" + hm.get(i));
		}

		// Set<Map.Entry<Integer,String>> entrySet = hm.entrySet();
		// for(Map.Entry<Integer,String> me : entrySet)

		for (Map.Entry<Integer, String> me : hm.entrySet()) {
			System.out.println(me.getKey() + "------" + me.getValue());
		}
	}
}


 

运行结果:abc1

abc2

abc3

[abc1, abc2, abc3]

3

5

1

i:3

i:5

i:1

1::a

2::b

3::c

1------a

2------b

3------c

 

 

可变参数

JDK1.5版本出现的新特性

方法的可变参数。

在使用时注意:可变参数一定要定义在参数列表最后面。

 

示例:

class ParamMethodDemo {
	public static void main(String[] args) {
		// show(3,4);
		/*
		 * //虽然少定义了多个方法。 但是每次都要定义一个数组。作为实际参数。
		 * 
		 * int[] arr = {3,4}; show(arr);
		 * 
		 * int[] arr1 = {2,3,4,5}; show(arr1);
		 */

		/*
		 * 可变参数。 其实就是上一种数组参数的简写形式。 不用每一次都手动的建立数组对象。 只要将要操作的元素作为参数传递即可。
		 * 隐式将这些参数封装成了数组。
		 */
		show("haha", 2, 3, 4, 5, 6);
		// show(2,3,4,5,6,4,2,35,9,"heh");
		// show();
	}

	public static void show(String str, int... arr) {
		System.out.println(arr.length);
	}
	/*
	 * public static void show(int[] arr) {
	 * 
	 * }
	 */
	/*
	 * public static void show(int a,int b) { System.out.println(a+","+b); }
	 * public static void show(int a,int b,int c) {}
	 */
}


 

运行结果:5

 

 

静态导入

当类名重名时,需要指定具体的包名。

当方法重名是,指定具备所属的对象或者类。

 

示例:

import java.util.*;
import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。
import static java.util.Collections.*;
import static java.lang.System.*;//导入了System类中所有静态成员。

class StaticImport // extends Object
{
	public static void main(String[] args) {

		out.println("haha");
		int[] arr = { 3, 1, 5 };

		sort(arr);
		int index = binarySearch(arr, 1);
		out.println(Arrays.toString(arr));
		System.out.println("Index=" + index);

		ArrayList al = new ArrayList();
		al.add(1);
		al.add(3);
		al.add(2);

		out.println(al);

		sort(al);
		out.println(al);
	}
}


 

运行结果:haha

[1, 3, 5]

Index=0

[1, 3, 2]

[1, 2, 3]

 

 

 

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

详情请查看:http://edu.csdn.net


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值