zoukankan      html  css  js  c++  java
  • java day13第十三课 集合的工具类和其他类

    集合中的工具类Collections和Arrays

    集合框架的工具类:

    Collections:

    方法sort()
    代码示例

    package com.rf.collections;
    
    import java.util.*;
    
    public class CollectionsDemo {
    
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    
    	sortDemo();
    	
    }
    
    public static void sortDemo(){
    	
    		List<String> list = new ArrayList<String>();
    		list.add("abb");
    		list.add("abc");
    		list.add("a");
    		list.add("aaaaaaaaa");
    		list.add("baa");
    		list.add("cba");
    		list.add("aaa");
    		System.out.println(list);
    //		自然排序
    		Collections.sort(list);
    		System.out.println(list);
    //		按照字符串长度排序,再自然排序
    		Collections.sort(list,new Compare());
    		System.out.println(list);
    		
    	}
    	
    	
    
    }
    package com.rf.collections;
    
    import java.util.Comparator;
    
    public class Compare implements Comparator<String>{
    
    @Override
    public int compare(String o1, String o2) {
    	// TODO Auto-generated method stub
    	
    	
    	if(o1.length() > o2.length()){
    		return 1;
    	}
    	if(o1.length() < o2.length()){
    		return -1;
    	}
    	 
    	
    	
    	
    	return o1.compareTo(o2);
    }
    
    }
    

    max()方法
    package com.rf.collections;
    
    import java.util.*;
    
    public class CollectionsDemo {
    
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    
    	maxDemo();
    	
    }
    
    public static void maxDemo(){
    	List<String> list = new ArrayList<String>();
    	list.add("abb");
    	list.add("abc");
    	list.add("a");
    	list.add("aaaaaaaaa");
    	list.add("baa");
    	list.add("cba");
    	list.add("aaa");
    	Collections.sort(list);
    	System.out.println(list);
    	String max = Collections.max(list);
    	System.out.println(max);
    }
    }
    

    binarySearch 方法,前提是此集合必须是有序的
    
    package com.rf.collections;
    
    import java.util.*;
    
    public class CollectionsDemo {
    
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    
    	binarySearchDemo();
    	
    }
    
    public static void binarySearchDemo(){
    	List<String> list = new ArrayList<String>();
    	list.add("abb");
    	list.add("abc");
    	list.add("a");
    	list.add("aaaaaaaaa");
    	list.add("baa");
    	list.add("cba");
    	list.add("aaa");
    	Collections.sort(list);
    	System.out.println(list);
    	int index = Collections.binarySearch(list,"aaa");
    	//相当于我们调用half方法,折半查找。
    	//half(list,"aaa");
    	System.out.println(index);
    }
    
    
    public static int half(List<String> list,String value){
    	int max,min,mid;
    	max = list.size()-1;
    	min = 0;
    	while(min <= max){
    		mid = (max+min)>>1;
    		String str = list.get(mid);
    		int num =  str.compareTo(value);
    		if(num > 0){
    			max = mid - 1;
    		}else if(num < 0){
    			min = max + 1;
    		}else{
    			return mid;
    		}
    	}
    	return min;
    	
    }
    

    fill方法可以将list集合中的所有元素替换成指定元素。

    public class CollectionsDemo {
    
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    
    	fillDemo();
    	
    }
    
    public static void fillDemo(){
    	List<String> list = new ArrayList<String>();
    	list.add("abb");
    	list.add("abc");
    	list.add("a");
    	list.add("aaaaaaaaa");
    	list.add("baa");
    	System.out.println(list);
    	Collections.fill(list, "qq");
    	System.out.println(list);
    }
    
    }
    

    replaceAll方法和reverse方法

    public class CollectionsDemo {
    
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    
    	replaceAll();
    	
    }
    
    
    public static void replaceAll(){
    	List<String> list = new ArrayList<String>();
    	list.add("abb");
    	list.add("abc");
    	list.add("a");
    	list.add("aaaaaaaaa");
    	list.add("baa");
    	System.out.println(list);
    //		替换
    		Collections.replaceAll(list, "baa", "cba");
    		System.out.println(list);
    //		反转
    		Collections.reverse(list);
    		System.out.println(list);
    	
    }
    

    Arrays

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

    Arrays方法

    将数组转换为list集合:

    String[]  arr =  {"abc","aa","cc","bb"};
    List<String> list = Arrays.asList(arr);
    System.out.println(list);
    //判断数组里面是否存在某元素,如果用数组的方法写?
    list.contains("cc");
    //list.add("ssss");
    //java.lang.UnsupportedOperationException 不支持操作异常
    //注意:将数组转换为集合,不可以使用集合的增删方法,因为数组的长度是固定的
    
    //如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转换成集合中的元素。
    //如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素进行存储
    int[] arr = {1,2,3,4};
    List<int[]> list = Arrays.asList(arr);
    System.out.println(list);
    
    Integer[] arr1 = {1,2,3,4};
    List<Integer> list1 = Arrays.asList(arr1);
    System.out.println(list1);
    

    集合转数组:

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

    高级for循环:

    foreach格式:
    for(数据类型 变量名:被遍历的集合(Collection)或者数组){
    
    
    }
    foreach的底层实现原理就是迭代器:
    ArrayList<String> list = new ArrayList<String>();
    list.add("a1");
    list.add("a2");
    list.add("a3");
    
    for(String str : list){
    str = "123";
    	System.out.println(str);
    }
    //foreach对集合进行遍历,只能获取集合的元素,不能对集合进行操作。
    System.out.println(list);
    
    //迭代器除了遍历,还可以进行remove集合中的元素动作。如果使用ListIterator还可以再遍历过程中进行增删改查的动作。
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
    	System.out.println(it.next());
    }
    

    传统for循环和高级for循环的区别?

    高级for有局限性,必须有被遍历的目标。比如打印helloworld一百次。
    所以我们在遍历数组的时候希望使用传统for循环。因为传统for循环可以定义角标
    
    遍历map集合:
    HashMap<Integer, String> ha = new HashMap<Integer, String>();
    ha.put(1, "zhang");
    ha.put(2, "wang");
    ha.put(3, "wang");
    ha.put(4, "wang");
    //	实现1:
    	Set<Integer> keySet = ha.keySet();
    	for(Integer key : keySet){
    		System.out.println("key = "+key+"   value = "+ha.get(key));
    	}
    //	实现2:
    	for(Map.Entry<Integer, String> mm : ha.entrySet()){
    		System.out.println("key = "+mm.getKey()+"   value = "+mm.getValue());
    	}
    

    可变参数
    JDK1.5版本出现的新特性

    package com.rf.arraysDemo;
    
    public class Demo {
    
    	public static void main(String[] args) {
    //		show(1,2);
    //		show(1,2,3);
    //		虽然少定义了参数的方法,但是我们每次都要定义一个数组,作为实际参数
    //		int[] arr = {3,4};
    //		show(arr);
    //		int[] arr1 = {3,4,5};
    //		show(arr1);
    //		可变参数,其实就是上一种数组参数的简写形式,不用每次都手动建立数组对象。只要将
    //		要操作的元素作为参数传递即可。隐式将这些参数封装成了数组。
    		show(1);
    		show(11,1,1,1,1,1,1,1,1,1,1,1);
    		
    	}
    
    	public static void show(int... arr){
    		System.out.println(arr);
    	}
    	
    //	public static void show(int[] arr){
    //		
    //	}
    //	public static void show(int a,int b){
    //		
    //		
    //	}
    //	public static void show(int a,int b,int c){
    //	
    //		
    //		
    //	}
    	
    }
    

    静态导入

    import java.util.*;
    import static java.util.Arrays.*;// 导入的是Arrays这个类中的所有成员
    
    
    public class Demo {
    
    	public static void main(String[] args) {
    		
    		int[] arr ={1,2,2,5,7,8,4,3};
    		sort(arr);
    		int index = binarySearch(arr, 5);
    //		当方法重名时,需要指定具体的包名
    //		当方法重名时,指定所属的对象或者类
    		System.out.println(Arrays.toString(arr));
    		System.out.println(index);
    		}
    		}
    

    其他对象

    System

    /*描述系统的一些信息,不能被实例化.他的方法和属性都是静态的
    out代表:标准输出,默认是控制台
    in代表:标准输入,默认键盘
    获取系统属性信息:getProperties()
    */ 
    	public static void main(String[] args) {
    		Properties p = System.getProperties();
    //	 	因为Properties是Hashtable的子类,也就是Map集合的一个子类对象
    //		我们可以通过Map的方法取出该集合中的元素
    //		该集合中存储的都是字符串,没有泛型定义
    //		获取所有属性信息
    		for (Object obj : p.keySet()){
    			String value = (String)p.get(obj);
    			System.out.println(obj+"::"+value);
    		}
    
    		//		如何在系统中自定义一些特有的属性信息
    		System.setProperty("mykey", "mymac");
    //		获取指定属性信息
    		System.getProperty("mykey");
    		
    	}
    

    Runtime

    	/*
    	该类中没有提供构造函数,说明我们不能new对象。我们如何使用其中的方法,该类中存在非静态方法,
    	该类肯定会提供一个方法获取本类对象,而且该方法是静态的,并返回值类型是本类类型的。由这里能看出该类使用了单例设计模式
    	该方法为getRuntime()
    	*/
    		
    

    Date

    	public class DateDemo {
    
    	public static void main(String[] args) throws IOException{
    		// TODO Auto-generated method stub
    
    		Date d = new Date();
    		System.out.println(d);//打印时间看着不爽,希望格式能一目了然
    		//将模式封装到SimpleDateFormat对象中
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");
    		//调用format方法让模式格式化date对象
    		String time = sdf.format(d);
    		System.out.println(time);
    		
    	}
    
    }
    	
    

    Calendar

    	public class CalendarDemo {
    	public static void main(String[] args) {
    		Calendar c = Calendar.getInstance();
    //		设置日期
    //		c.set(2017, 4, 26);
    //		add方法对时间量的偏移
    		c.add(Calendar.YEAR, -1);
    		print(c);
    	}
    	
    	
    	public static void print(Calendar c){
    		System.out.println(c.get(Calendar.YEAR)+"年");
    //		System.out.println((c.get(Calendar.MONTH)+1)+"月");
    		System.out.println(c.get(Calendar.DAY_OF_MONTH)+"日");
    //		System.out.println("星期"+c.get(Calendar.DAY_OF_WEEK));
    		
    		
    		String[] months = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
    		String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
    		
    		int index = c.get(Calendar.MONTH);
    		int index1 = c.get(Calendar.DAY_OF_WEEK);
    		
    		System.out.println(months[index]);
    		System.out.println(weeks[index1]);
    		
    		
    		
    	}
    	//练习:1、获取任意年的二月有多少天?
    			2、获取昨天的这个时刻?
    
    
  • 相关阅读:
    SpringMVC金课-课程大纲
    Type Cannot change version of project facet Dynamic Web Module to 3.0.
    使用maven 创建web项目 + 搭建SSM框架
    多文件上传
    asp.net 连接access数据库方法
    分享代码
    DIV+CSS解决IE6,IE7,IE8,FF兼容问题(转至http://www.douban.com/note/163291324/)
    asp.net发布网站(转)
    Img垂直居中
    http://www.apkbus.com/android-6231-1.html
  • 原文地址:https://www.cnblogs.com/chendujie/p/6870266.html
Copyright © 2011-2022 走看看