zoukankan      html  css  js  c++  java
  • 集合框架__【Collections工具类】【Arrays工具类】



    集合框架的工具类。Collections 和 Arrays

    Collections工具类

    :集合框架的工具类。里面定义的都是静态方法。
    Collections和Collection有什么区别?
    Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
    它有两个常用的子接口,
    List:对元素都有定义索引。有序的。可以重复元素。
    Set:不可以重复元素。无序。

    Collections是集合框架中的一个工具类。该类中的方法都是静态的
    提供的方法中有可以对list集合进行排序,二分查找等方法。
    通常常用的集合都是线程不安全的。因为要提高效率。
    如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

    集合的排序和二分查找

    sort()、binarySearch() 

    	public static void binarySearchDemo()
    	{
    		List<String> list = new ArrayList<String>();
    		list.add("as");
    		list.add("sfgg");
    		list.add("ass");
    		list.add("hhsaaa");
    		list.add("zb");
    		list.add("v");
    		Collections.sort(list);//二分查找必须是有序的
    		sop(list);
    //		int index = Collections.binarySearch(list,"zb");
    		int index = halfSearch(list, "zbb");//调用效果是一样的
    		sop("index: "+index);
    	}
    二分查找的算法实现:

    	public static int halfSearch(List<String> list, String key)
    	{
    		int max,min,mid;	//binarySearch()的逻辑实现
    		max = list.size()-1;
    		min = 0;
    		while (min<=max)
    		{
    			mid = (max+min)>>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;	//如果key不存在,返回插入点
    	}

    集合的替换、反转、混洗等操作

    import java.util.*;
    class CollectionDemo2 
    {
    	public static void main(String[] args) 
    	{
    		List<String> list = new ArrayList<String>();
    		list.add("as");
    		list.add("as");
    		list.add("sfgg");
    		list.add("ass");
    		list.add("hhsaaa");
    		sop(list);	//打印原集合
    
    //		Collections.fill(list,"pp");//将list集合所有元素替换成指定元素
    		Collections.replaceAll(list,"as","bbb");//将list中该指定元素换成另外的指定元素,可替换多个相同元素
    //		list.set(2,"haha");	//将指定角标上的元素替换,只能替换一个元素
    		sop(list);
    		Collections.reverse(list);	//反转	调用了swap()方法
    		Collections.swap(list,1,2);	//调换1,2角标元素的位置
    		sop(list);
    		Collections.shuffle(list);	//混洗,随机性
    		sop("shuffle: "+list);
    	}
    	public static void sop(Object obj)
    	{
    		System.out.println(obj);
    	}
    }

    Arrays工具类:

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

    一、将数组转成集合

    使用Arrays类中的 Arrays.asList()方法
    将数组转成集合把数组变成list集合的好处:可以使用集合的思想和方法操作数组中的元素

    将数组变成集合,不可以使用集合的增删方法,因为数组长度固定;可以contains()、get()、indexOf()、subList()等不会改变数组长度的操作
    如果增删会发生UnsupportedOperationException / 不支持操作异常
    如果数组中的元素都是对象,那么变成集合时,数组元素就直接转成集合元素
    如果数组中元素都是基本数据类型,就将该数组作为集合中的一个元素,所以要对基本数据装箱

    示例:

    import java.util.*;
    class ArraysDemo 
    {
    	public static void main(String[] args) 
    	{
    		int[] a = {6,8,7};
    		sop(Arrays.toString(a));//直接打印数组
    		
    		String[] str = {"da","gdd","ass","xxx",};
    		sop(Arrays.toString(str));	//打印array
    		List<String> list = Arrays.asList(str);//将数组转成list集合
    		sop(list);					//直接打印list
    		sop("contains:"+list.contains("da"));//可以直接判断
    		
    		//int[] arr = {1,2,3};	//数组中基本数据类型元素无法转成集合中的对象,打印出数组对象的哈希值,[[I@4f57011e]
    		Integer[] arr = {9,0,1};//进行自动装箱,成为对象
    		List<Integer> li = Arrays.asList(arr);
    		sop(li);	//
    	}
    //数组的查询判断操作,在集合中可以直接用contains实现
    /*	public static boolean myContains(String[] arr,String key)
    	{
    		for (int x=0; x<str.length;x++ )
    		{
    			if (arr[x].equals(key))
    				return true;
    		}
    		return false;//不存在则返回false
    	}
    */
    	public static void sop(Object obj)
    	{
    		System.out.println(obj);
    	}
    }

    二、将集合转成数组

    使用Collection接口中的toArray方法

    为什么要将集合转成数组?           原因:为了限定对元素的操作,禁止增删

    如果指定数组的length小于集合的size,那么方法方法内部都会创建一个数组,长度为集合的size
    如果指定数组的length大于集合的size,就不会创建新数组,而是使用传进来的数组。没有对应元素角标的值为null
    所以创建size长度的数组最优
    示例:

    import java.util.*;
    class  CollectionToArray
    {
    	public static void main(String[] args) 
    	{
    		ArrayList<String> al = new ArrayList<String>();
    		al.add("aaa01");
    		al.add("aaa03");
    		al.add("aaa02");
    
    		String[] arr = al.toArray(new String[0]);//length
    		sop(Arrays.toString(arr));
    	}
    	public static void sop(Object obj)
    	{
    		System.out.println(obj);
    	}
    }




  • 相关阅读:
    PIL 和 pythonopencv 从内存字节码中读取图片并转为np.array格式
    【转载】 什么是元类
    【转载】 Py之cupy:cupy的简介、安装、使用方法之详细攻略
    【转载】 vscode如何在最新版本中配置c/c++语言环境中的launch.json和tasks.json?
    【转载】 Ubuntu下使用VSCode的launch.json及tasks.json编写
    Javascript高级程序设计第二版第六章面向对象程序设计(ObjectOriented Programming)简称OOP编程笔记
    Javascript高级程序设计第二版第五章引用类型笔记
    css权重简单之谈
    编辑神器VIM下安装zencoding
    显示层3s后隐藏
  • 原文地址:https://www.cnblogs.com/Joure/p/4337218.html
Copyright © 2011-2022 走看看