JAVA笔记——Collections类(Java中升级版的数据结构)

使用Collections类,必须在文件头声明import java.util.*;

一、动态、有序、可变大小的一维数组Vector与ArrayList

Vector与ArrayList,两者唯一的差别是:vector自带线程互斥,多个线程对其读写会抛出异常,而arraylist则允许多个线程读写,其他部分是一模一样的,换句话说,如果是单线程在读写,使用Vector与ArrayList没有任何区别,但现在编程基本都用ArrayList,使用Vector有点非主流了、
--------------------- 
1、Vector的使用如下

public static void Vectortest() {
		// Vector<Double>表示这个vector只能存放double
		// Vector<String>表示这个vector只能存String
		// 虽然Vector<Object> vector=new Vector<Object>();等价于Vector vector=new
		// Vector();但是,eclipse中这样写会警告,表示你这个Vector不规范,╮(╯▽╰)╭
		Vector<Object> vector = new Vector<Object>();
		vector.add(1.6);
		vector.add(2.06);
		vector.add(1);
		System.out.println("单纯的add表示从结尾加入元素:" + vector);
		System.out.println("size()能求出vector的所含元素的个数:" + vector.size());
		vector.remove(1);
		System.out.println("remove(1)表示删去第1个元素,由于计数从0开始,也就是2.06这个元素:" + vector);
		vector.remove(vector.lastElement());
		System.out.println("删去最后一个元素的vector为:" + vector);
		vector.add(0, 1.8888);
		System.out.println("在第0个位置加入1.8888这个元素:" + vector);
		vector.set(0, "a");
		System.out.println("把第0个位置这个元素改为a:" + vector);
	}

这段方法如果在主函数调用:

System.out.println("======Vector数据结构的测试开始======");
		Vectortest();
		System.out.println("======Vector数据结构的测试结束======")

程序输出如下:

======Vector数据结构的测试开始======
单纯的add表示从结尾加入元素:[1.6, 2.06, 1]
size()能求出vector的所含元素的个数:3
remove(1)表示删去第1个元素,由于计数从0开始,也就是2.06这个元素:[1.6, 1]
删去最后一个元素的vector为:[1.6]
在第0个位置加入1.8888这个元素:[1.8888, 1.6]
把第0个位置这个元素改为a:[a, 1.6]
======Vector数据结构的测试结束======

2、ArrayList

public static void ArrayListtest() {
		ArrayList<Double> arraylist = new ArrayList<Double>();
		arraylist.add(1.0);
		arraylist.add(4.0);
		arraylist.add(5.0);
		arraylist.add(2.3);
		System.out.println("单纯的add表示从结尾加入元素:" + arraylist);
		System.out.println("size()能求出所含元素的个数:" + arraylist.size());
		arraylist.remove(1);
		System.out.println("remove(1)表示删去第1个元素,由于计数从0开始,也就是4这个元素:" + arraylist);
		arraylist.remove(arraylist.size() - 1);
		System.out.println("删去最后一个元素的arraylist为:" + arraylist);
		arraylist.add(0, 1.8888);
		System.out.println("在第0个位置加入1.8888这个元素:" + arraylist);
		arraylist.set(0, 9.0);
		System.out.println("把第0个位置这个元素改为a:" + arraylist);
		Collections.sort(arraylist);
		System.out.println("如果arraylist不是抽象类型,则支持排序" + arraylist);
 
	}

这里可以看到ArrayList删除最后一个元素的方式与Vector有所不同,主要是ArrayList没有lastElement()这个方法来取出最后一个元素remove()掉,只能用arraylist.size() - 1来确定最后一个元素的位置。

主函数调用:

System.out.println("======ArrayList数据结构的测试开始======");
		ArrayListtest();
		System.out.println("======ArrayList数据结构的测试结束======");

程序输出如下:

======ArrayList数据结构的测试开始======
单纯的add表示从结尾加入元素:[1.0, 4.0, 5.0, 2.3]
size()能求出所含元素的个数:4
remove(1)表示删去第1个元素,由于计数从0开始,也就是4这个元素:[1.0, 5.0, 2.3]
删去最后一个元素的arraylist为:[1.0, 5.0]
在第0个位置加入1.8888这个元素:[1.8888, 1.0, 5.0]
把第0个位置这个元素改为a:[9.0, 1.0, 5.0]
如果arraylist不是抽象类型,则支持排序[1.0, 5.0, 9.0]
======ArrayList数据结构的测试结束======

从上面的两个例子,可以看到Vector与ArrayList比一个普通的数组,也就是课本上所教的一维数组int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 7 };强大很多,可以在任意位置插入元素,也可以不用遍历数组就能够用一个方法删除指定位置的元素,当然为你考试你还是要知道这个数组是怎么遍历的。其实,ArrayList与普通的一维数组完全可以实现互转,而且利用ArrayList还能够直接对array进行排序,而不用再对array写一个冒泡排序之类的,直接用Collections.sort();就能够排序数组,然后再用Collections.reverse();就能实现逆排序,当然还是那句,为你考试你还是要知道这个数组是怎么排序的。

比如如下的方法,实现了对一维数组int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 7 };的排序与逆排序,先把数组转化成ArrayList再用Collections.sort();与Collections.reverse();排序,最后再把ArrayList内容转化回一维数组:
 

public static void arrayListSort() {
		int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 7 };
		ArrayList<Integer> arraylist = new ArrayList<Integer>();
		for (int i = 0; i < array.length; i++)
			System.out.print(array[i] + ",");
		for (int i = 0; i < array.length; i++)
			arraylist.add(array[i]);
		Collections.sort(arraylist);
		for (int i = 0; i < array.length; i++)
			array[i] = arraylist.get(i);
		System.out.print("排序后的数组:");
		for (int i = 0; i < array.length; i++)
			System.out.print(array[i] + ",");
		Collections.reverse(arraylist);
		for (int i = 0; i < array.length; i++)
			array[i] = arraylist.get(i);
		System.out.print("逆排序后的数组:");
		for (int i = 0; i < array.length; i++)
			System.out.print(array[i] + ",");
		//排序之后把arraylist销毁
		arraylist = null;
		//这句是建议Java马上回收垃圾,当然这句有没有都行,Java在运行的过程中会自动清除垃圾的
		System.gc();
 
	}

主函数调用:

System.out.println("======Java数组排序开始======");
		arrayListSort();
		System.out.println("======Java数组排序结束======");

程序输出如下:

======Java数组排序开始======
8,7,100,88,6,4,5,33,7,排序后的数组:4,5,6,7,7,8,33,88,100,逆排序后的数组:100,88,33,8,7,7,6,5,4,

======Java数组排序结束======

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值