现在的位置: 首页 > 综合 > 正文

黑马程序员 java 基础 毕向东 面向对象 集合框架 工具类 Collections and Arrays

2018年04月30日 ⁄ 综合 ⁄ 共 7869字 ⁄ 字号 评论关闭
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员 java 基础 毕向东 面向对象 集合框架 工具类 Collections and Arrays

1:集合框架的工具类Collections 的常用方法 binarySearch max sort swap

package day17Collections;

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

public class CollectionsDemo {

/*集合框架的工具类
 * */
	public static void main(String[] args) {
		sortDemo();
//		maxDemo();
//		binarySeacrchDemo();
	}
	public static <T extends Comparable<? super T>> void sort(List<T> list){
		
	}
	static int halfSearch(List<String> l,String key){
		int max,min,mid = 0;
		max=l.size()-1;
		min=0;
		while(min<=max){//注意是等于
			mid=(min+max)/2;
			String str=l.get(mid);
			int num=str.compareTo(key);
			if(num>0){
				max=mid-1;
			}else
				if(num<0){
					min=mid+1;
				}else{
					return mid;
				}
			System.out.println(min+"-->"+max);
		}
		return -min-1;//返回可以插入的位置。从1计数  即:-插入点-1
	}
	static int halfSearchCompara(List<String> l,String key,Comparator<String> cmp){
		int max,min,mid = 0;
		max=l.size()-1;
		min=0;
		while(min<=max){//注意是等于
			mid=(min+max)/2;
			String str=l.get(mid);
//			int num=str.compareTo(key);
			int num=cmp.compare(str, key);
			if(num>0){
				max=mid-1;
			}else
				if(num<0){
					min=mid+1;
				}else{
					return mid;
				}
			System.out.println(min+"-->"+max);
		}
		return -min-1;//返回可以插入的位置。从1计数  即:-插入点-1
	}
	static void binarySeacrchDemo(){
		List<String> l=new ArrayList<String>();
		l.add("bb");
		l.add("aaa");
		l.add("cc");
		l.add("ddaaa");
		l.add("dd");
		
		
		Collections.sort(l);
		sop(l);
//		int indxe=Collections.binarySearch(l, "aaas");
		int indxe=halfSearch(l,"aaab");
		sop("index :"+indxe);
		System.out.println("==============================");
		indxe=Collections.binarySearch(l, "bb");
		sop("index :"+indxe);
		System.out.println("------------------------------");

		indxe=Collections.binarySearch(l, "aaa",new ComparaByLength());
		sop(""+indxe);
		Collections.sort(l,new ComparaByLength());
		sop(l);
		indxe=halfSearchCompara(l,"aaa",new ComparaByLength());
		sop("index :"+indxe);
		Collections.sort(l,new ComparaByLength());
		sop(l);
		indxe=Collections.binarySearch(l, "aaa",new ComparaByLength());
		sop(l);
		sop("index :"+indxe);
	}
	static void maxDemo(){
		List<String> l=new ArrayList<String>();
		l.add("bb");
		l.add("aaa");
		l.add("cc");
		l.add("ddaaa");
		l.add("dd");
		sop(l);
		String a=Collections.max(l,new ComparaByLength());
		sop(a);
	}
	static void sortDemo(){
		List<String> l=new ArrayList<String>();
		l.add("bb");
		l.add("aaa");
		l.add("cc");
		l.add("ddaaa");
		l.add("dd");
		sop(l);
		Collections.sort(l,new ComparaByLength());
		sop(l);
		Collections.swap(l, 0, 3);
		sop(l);
	}
	static void sop(Object obj){
		System.out.println("->"+obj);
	}
}
class ComparaByLength implements Comparator<String>{
	public int compare(String o1, String o2) {
		return new Integer(o1.length()).compareTo(new Integer(o2.length()));
	}
	
}

2集合框架的工具类Collections 的常用方法 fill


package day17Collections;
/*
 * fill(List<E> ,obj)
 * 可以讲List集合中的所有元素替换成obj 
 * 
 * 联系,将部分元素替换成指定元素*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;

public class CollectionsDemo2 {

	public static void main(String[] args) {

		List<String> l=new ArrayList<String>();
		l.add("bb");
		l.add("aaa");
		l.add("cc");
		l.add("ddaaa");
		l.add("dd");
//		fillDemo();
//		replaceAllDemo();
//		orderDemo();
		shuffleDemo();
	}
	static void shuffleDemo(){

		List<String> l=new ArrayList<String>();
		l.add("bb");
		l.add("aaa");
		l.add("cc");
		l.add("ddaaa");
		l.add("dd");
		sop(l);
		Collections.shuffle(l, new Random());
		sop(l);
	}
	static void orderDemo(){
//		TreeSet<String> s=new TreeSet<String>(Collections.reverseOrder());
//		TreeSet<String> s=new TreeSet<String>(new ComparaByLength2());

		TreeSet<String> s=new TreeSet<String>(Collections.reverseOrder(new ComparaByLength2()));
		
		s.add("abcde");
		s.add("aaa");
		s.add("kkk");
		s.add("ccc");
		for (Iterator<String> iterator = s.iterator(); iterator.hasNext();) {
			String string =iterator.next();
			System.out.println("String:"+string);
			
		}
		
	}
	static void replaceAllDemo(){
		List<String> l=new ArrayList<String>();
		l.add("bb");
		l.add("aaa");
		l.add("cc");
		l.add("ddaaa");
		l.add("dd");
		Collections.replaceAll(l, "aaa","bbbbb");
		sop(l);
		Collections.reverse(l);
		sop(l);
	}
	static void fillDemo(){
		List<String> l=new ArrayList<String>();
		l.add("bb");
		l.add("aaa");
		l.add("cc");
		l.add("ddaaa");
		l.add("dd");
		Collections.fill(l, "fill");
		sop(l);
	}
	static void sop(Object obj){
		System.out.println("->"+obj);
	}
}
class ComparaByLength2 implements Comparator<String>{
	public int compare(String o1, String o2) {
		int num= new Integer(o1.length()).compareTo(new Integer(o2.length()));
		if(num==0){
			return o1.compareTo(o2);
		}
		return num;
	}
}
class StrComparaInTreeSet implements Comparator<String>{

	@Override
	public int compare(String o1, String o2) {
		
//		return o1.compareTo(o2);
		return o2.compareTo(o1);
	}
}

3  Arrays 工具 类  : asList  将数组变成List集合:toString(T [ ])

package day17Collections;

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

public class Arrays_Demo {
/*
 * Arrays 工具类
 * 都是静态方法
 * 
 * asList  将数组变成List集合
 * 
 * */
	public static void main(String[] args) {

		int[] arr={1,2,34};
		String arrStr=Arrays.toString(arr);
		System.out.println(arrStr);
		String[] str={"aa","dfa","asdf"};
		
		//把数组变成List集合,
		/*可以使用集合的思想和方法
		 * 进行操作数组中的元素
		 * */
		List<String> lStr=Arrays.asList(str);
		System.out.println(lStr.contains("aa"));
		
//		lStr.add("adfafasdfas");
		/* java.lang.UnsupportedOperationException
		 * 
		 * 将数组变成List时,不能使用增加和删除方法
		 * 将会发生不支持异常*/
		
		System.out.println(lStr);
		
		Integer[] arrNum={1,2,34};
		List<Integer> arrStrNum=Arrays.asList(arrNum);
		System.out.println(arrStrNum);//[[I@d6132c4]
		
		/*如果数组中的元素是对象,
		 * 数组中 的元素就直接变成集合中的元素
		 *如果数组中的元素是基本数据类型,那么该
		 *数组作为集合的元素
		 */
	}

}

4  String[] sArr = toArray(new String[ List.size() ]);

package day17Collections;

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

public class Collection_To_Array {
/*
 * */
	public static void main(String[] args) {
		ArrayList<String> al=new ArrayList<String>();
		al.add("abc1");
		al.add("abc2");
		al.add("abc3");
		al.add("abc1");
		
		
//		String[] sArr=al.toArray(new String[2]);
//		abc1, abc2, abc3, abc1]
		
		String[] sArr=al.toArray(new String[6]);
//		abc1, abc2, abc3, abc1, null, null]
		
		
		System.out.println(Arrays.toString(sArr));
		
		/*1:指定返回类型时到底定义多么长呢
		 * 
		 * --->当指定类型的长度小于集合 的size()
		 * 该集合内部会自动创建一个新的数组
		 * 长度为集合的size
		 * 
		 *---> 当指定类型的长度小于集合 的size()
		 * 就不会新创建,就使用传递的数组
		 * 
		 * 所以最后创建new String[list.size()]
		 * 
		 * 为什么要将集合转变成数组
		 * 为了限定对元素的操作*/
	}

}

5  增强for循环  for(Object obj:? implement  Iterable)

package day17Collections;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/*增强for循环
 * 高级for 循环
 * for(数据类型 变量名:被遍历的集合或者数组){
 * 
 * }
 * 对集合进行遍历只能获取,不能对 集合进行操作
 * 迭代器除了变量还可以进行remove 集合中的元素
 * 
 * 如果使用ListIterator 还可以在变量的过程中
 * 进行增删改查
 * 
 * 传统for循环还高级for有什么区别
 * 
 * 高级for循环有一个局限性,必须有变量 的目标
 * 
 * 建议遍历数组的时候使用传统for
 * 可以使用角标
 * */
public class ForEachDemo {
/**/
	public static void main(String[] args) {

		ArrayList<String> al=new ArrayList<String>();
		al.add("abc1");
		al.add("abc2");
		al.add("abc3");
		al.add("abc1");
		
		for (Iterator<String> iterator = al.iterator(); iterator.hasNext();) {
			String string = (String) iterator.next();
			System.out.println(string);
		}
		System.out.println("-------");
		for(String s : al){
			s="kk";//只能取出查看,不能删除修改
			System.out.println(s);
		}//简化书写
		System.out.println(al);
		/*public interface Iterable<T>
		 * 实现这个接口允许对象成为 
		 * "foreach" 语句的目标。 
		 * */
		int[] arr={1,3,4,4};
		for(int a : arr){
			System.out.println(a);
		}
		System.out.println("for used HashMap");
		HashMap<Integer,String> hm=new HashMap<Integer,String> ();
		hm.put(1,"a");
		hm.put(2,"b");
		hm.put(3,"c");
		for(int i:hm.keySet()){
			System.out.println("key:"+i+":value"+hm.get(i));
		}
		System.out.println("---Map.entry");
		for(Map.Entry<Integer,String> me:hm.entrySet()){
			int key=me.getKey();
			String value=me.getValue();
			System.out.println("key:"+key+":value:"+value);
		}
	}

}

6 可变参数  T  method(T  ... t){ }

package day17Collections;

public class ParamMethodDemo {
/*可以参数
 * 实际就是数组参数的简写形式
 * 不用每一次都作为参数传递
 * 即可
 * 隐式的将参数封装成了数组
 * 
 * 
 * 使用可变参数:
 * 将可变参数定义在参数列表的后面
 * */
	public static void main(String[] args) {
//		int[] arr={3,1};
//		int[] arr={3,1};
		//虽然少定义了方法,但多定义的数组
		show(1);
		show(1,2,3);
		show(1,2,3,4);
	}
	static void show(int ...arr){
		//arr 代表一个数组
		for(int i:arr){

			System.out.println(i);
		}
	}
//	static void show(int a,int b){
//		System.out.println(a+","+b);
//	}
//	static void show(int a,int b,int c){
//		System.out.println(a+","+b+","+c);
//	}
}


7静态导入 import static

package day17Collections;

import java.util.Arrays;
import static java.util.Arrays.*;
import static java.lang.System.*;
public class StaticImport {
/*静态导入
 * 当类名重复,要指定包名
 * 当方法重名是要指定所属的类或者对象
 * 
 * 
 *   import static 意思就是 导入静态的成员*/
	public static void main(String[] args) {
		int[] arr={8,1,3};
		sort(arr);
		int index=binarySearch(arr,1);
		out.println("index:"+index);
		out.println(Arrays.toString(arr));
	}

}

抱歉!评论已关闭.