一般来说课本上的数据结构包括数组、单链表、堆栈、树、图。我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组、二维数组无法完全表达你要表达的东西,而定义一个类Class有太过麻烦,这时候,你可以考虑一下用Java中的Collections类。使用Collections类,必须在文件头声明import java.util.*;
一、动态、有序、可变大小的一维数组Vector与ArrayList
Collections类里面包括动态、有序、可变大小的一维数组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][jbWn5R"CbRgjzsBr'SfGR3bfk>c?^j
4+SZWWn5RCjRgN7h4(4(驅4(5MRgj,!5MM!5MM!5M!5MM!5M!5MMРР(РРР(РMMРРMРРMРРMРРMRgjv|Mj,РРРMMjv|4(rR_"vjzs4(屔V6zjW,4(5Rgj,4(аа4(4(4(4(5Rgjv|4(5j,4(4(5jv|4(5V6zjWv|4(/rvR?bbWnа4+3?cb
^*)3:vǒj
B30'Wnk
cR6Wj/vn*b;3B;gZW&4(Π4(r"oZjY履!M!53>g"C4(屔
MM4)1MYM/4(n&:>jr%Y1!MQM&C:>jr%!5!хgb)j&kj^cOB3/*fg3:*ǖNFgkj%履%V7 )j4(4(brZj3ro疒j惚r'&*rokkR24( |