JAVA学习第四十四课 — 集合框架工具类(二)

Collections操控集合的工具类,Arrays操控数组的工具类

Arrays中方法大多是重载

重点掌握asList();将数组转为集合

static

<T> List<T>
asList(T... a)

返回一个受指定数组支持的固定大小的列表。

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

public class Main
{
	public static void main(String[] args) {

		 String[] str = {"e","bn","gr","asd",};
		 List<String> list = Arrays.asList(str);
		 System.out.println(list.contains("e"));
		 list.add("asd");//错误
		 System.out.println(list.size());
	}
}

好处:可以使用集合中的方法操控数组元素

注意,数组长度是固定的,所以集合中的增删方法是不能使用的,抛出异常

如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为元素进行集合存储

如果数组中的元素是基本类型数值,那么会将数组作为集合中的元素进行存储

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

public class Main
{
	public static void main(String[] args) {

		 int[] a = {1,2,3,4,5};
		 System.out.println(a.length);
		 List<int[]> list2 = Arrays.asList(a);//泛型就需要写成数组形式了
		 System.out.println(list2.size());
	}
}

集合转数组

使用的就是Collection接口中的toArray方法

Object[] toArray()

返回包含此 collection 中所有元素的数组。

<T> T[]
toArray(T[] a)

返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

同样集合变数组也不能增删

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

public class Main
{
	public static void main(String[] args) {

		 List<String > list = new ArrayList<String>();
		 list.add("asd");
		 list.add("ef");
		 list.add("rg");
		 String[] strings = list.toArray(new String[5]);
		 //toArray方法需要传入一个指定类型的数组
		 //而数组的长度 如果小于集合的size,那么该方法会创建一个指定类型,长度和几个size一样的数组
		 //			 如果大于集合的size,那么该方法会使用指定的数组,存储集合中的元素,其他位置默认null
		 System.out.println(Arrays.toString(strings));
	}
}

建议,指定的长度为集合的size

JDK 1.5新特性

高级for循环

for(String : arr)

但是高级for不能遍历,map集合这样的双列集合,可以把map变单列的set,再用for

import java.util.HashMap;
import java.util.Map;

public class Main
{
	public static void main(String[] args) {

		Map<Integer, String> map = new HashMap<Integer, String>();
		map.put(1, "asd");
		map.put(5, "ad");
		map.put(4, "sd");
		for(Integer i : map.keySet()){
			String va = map.get(i);
			System.out.print(i+":"+va+" ");
		}
		System.out.println("------------------------");
		for(Map.Entry<Integer, String> me : map.entrySet()){
			System.out.print(me.getKey()+":"+me.getValue()+" ");
		}
	}
}

函数可变参数

其实就是一个数组,但是接收的是数组元素。且自动将这些元素,简化了调用者的书写

注意,可变参数类型,必须定义在参数列表的后面

往上看,asList就是这样用的

import java.util.HashMap;
import java.util.Map;

public class Main
{
	public static void main(String[] args) {
		 int arr[] = {1,2,3,4,5,6,7,8,9};
		int sum = add(arr);
		System.out.println(sum);

		int sum1 = newadd(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
		System.out.println(sum1);
	}
	//public static int newadd(int... arr,int a)	错误
	//public static int newadd(int a,int... arr)	正确
	public static int newadd(int... arr){
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		return sum;
	}
	public static int add(int a,int b,int c){
		return a+b+c;
	}
		public static int add(int[] arr){
			int sum = 0;
			for (int i = 0; i < arr.length; i++) {
				sum += arr[i];
			}
			return sum;
		}
}

静态导入

静态导入用的不多,虽然方便了一点,但阅读性变差很多

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static java.util.Collections.sort;//静态导入
import static java.util.Collections.*;//导入Collections所有
import static java.lang.System.*;//同样System也可以
//其实导入的类中的静态成员

public class Main
{
	public static void main(String[] args) {

		List<String> list = new ArrayList<String>();
		list.add("a4");
		list.add("a2");
		list.add("a1");
		list.add("a42");
		System.out.println(list);
		Collections.sort(list);
		System.out.println(list);
		sort(list);//就不需要每次都写Collections
		out.println(list);
	}
}

时间: 2024-10-12 22:18:02

JAVA学习第四十四课 — 集合框架工具类(二)的相关文章

JAVA学习第四十三课 — 集合框架工具类(一)

一.Collections:集合框架的工具类 其中的方法都是静态的 排序方法演示 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; class ComparaByLeng implements Comparator<String>{ public int compare(String o1, String o2) { int

黑马程序员——黑马基础——Map,集合框架工具类Conlections和Arrays

黑马程序员--黑马基础--Map,集合框架工具类Conlections和Arrays ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一,Map集合 Map<K,V>集合是一个接口,和List集合及Set集合不同的是,它是双列集合,并且可以给对象加上名字,即键(Key). 特点: 1)该集合存储键值对,一对一对往里存 2)要保证键的唯一性. Map集合的子类 Map |--Hashtable:底层是哈希表数据结构,不可以存入null键nu

集合框架工具类Collections

* Collections演示. * 1,用于操作集合的工具类. * 2,提供了很多的静态方法. * * 比如对list集合排序,二分查找,位置置换. * 对排序的元素进行顺序的逆转.reverseOrder * 还可以获取集合的最大值和最小值. * 最牛叉的是将非同步的集合转成同步的集合 synchronizedXXX package cn.itcast.p4.collections;   import java.util.ArrayList; import java.util.Collect

JAVA学习第三十四课(常用对象API)- 集合框架(二)—List集合及其子类特点

整个集合框架中最常用的就是List(列表)和Set(集) 一.List集合 && Set的特点 Collection的子接口: 1.List:有序(存入和取出的顺序一致),元素都有索引且可以重复    API文档解释:有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素. 2.Set:元素不能重复,无序,有可能会有序    API文档解释:一个不包含重复元素的 coll

JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点

整个集合框架中最经常使用的就是List(列表)和Set(集) 一.List集合 && Set的特点 Collection的子接口: 1.List:有序(存入和取出的顺序一致),元素都有索引且能够反复    API文档解释:有序的 collection(也称为序列).此接口的用户能够对列表中每一个元素的插入位置进行精确地控制.用户能够依据元素的整数索引(在列表中的位置)訪问元素,并搜索列表中的元素. 2.Set:元素不能反复,无序,有可能会有序    API文档解释:一个不包括反复元素的 c

JAVA学习第三十六课(常用对象API)- 集合框架(四)— Set集合:HashSet集合演示

随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里很多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发常用 HashSet集合 .TreeSet集合 Set集合的元素是不重复且无序 一.HashSet集合 API文档解释:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null 元素. 此类为基本操作提供了稳定性能,注意,此实现不是同步的. 由上可

JAVA学习第三十九课(常用对象API)- 集合框架(七)— Map集合及其子类对象

一.Map集合常见子类 HashTable:内部结构是哈希表,同步,此实现提供所有可选的映射操作,不允许使用 null 值和 null 键 (HashTable下有子类Properties,使用频率非常高,用来存储键值对型的配置文件信息和IO技术相结合) HashMap:内部结构是哈希表,不同步,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键. TreeMap:内部结构是二叉树,不同步,可以对Map集合中的键进行排序. 二.HashMap演示 import java.ut

JAVA学习第三十五课(常用对象API)- 集合框架(三)—Vector、LinkedList、ArrayList集合演示

集合框架构成图 摘自百度图片 一.Vector集合 演示 虽然Vector已经不常用了,但是还是要了解一下其中的方法 import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Vector

Java基础---泛型、集合框架工具类:collections和Arrays

第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类型的数据,无法加入指定类型以外的数据. 3.泛型是提供给javac编译器使用的可以限定集合中的输入类型说明的集合时,会去掉“类型”信息,使程序运行效率不受影响,对参数化的泛型类型,getClass()方法的返回值和原始类型完全一样. 4.由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就