java学习总结——集合框架

        集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

        (以上内容摘自百度百科)

        按照我的理解呢,可能有接触过java的都应该用过队列。刚开始学的时候是自己写一个自定义队列,使用时候在调用自己所写的队列中自己写的增删查改等等的功能。而集合框架呢则省去了这个麻烦~他是已经给我们定义好了的一套东东,里面包括着很多,好像比较常用的(或者说是我比较会使用的)有ArrayList,LinkedList,Vector,HashSet,TreeSet,HashMap。嗯。这个博客里面也就对这些进行下总结。

 

        首先总结一下各种List。

package listTest;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;

public class ListTest {

	public static void main(String[] args) {
		System.out.println("ArrayList测试:");
		arrayListTest();
		System.out.println("\n"+"LinkedList测试");
		linkedListTest();
		System.out.println("\n"+"Vector测试");
		vectorTest();
	}

	/*
	 * arraylist
	 */
	public static void arrayListTest() {
		// 实例化一个ArrayList对象
		ArrayList<Object> arrayList = new ArrayList<Object>();
		// 添加数据
		arrayList.add(3);
		arrayList.add(2);
		arrayList.add(1);
		arrayList.add("a");
		arrayList.add("bcd");
		arrayList.add(4);

		// 遍历输出
		for (int i = 0; i < arrayList.size(); i++) {
			System.out.print(arrayList.get(i) + "  ");
		}

	}

	/*
	 * LinkedList
	 */
	public static void linkedListTest() {
		LinkedList<Object> linkedList = new LinkedList<Object>();
		linkedList.add(3);
		linkedList.add(2);
		linkedList.add(1);
		linkedList.add("a");
		linkedList.add("bcd");
		linkedList.add(4);
		// 遍历输出
		for (int i = 0; i < linkedList.size(); i++) {
			System.out.print(linkedList.get(i) + "  ");
		}

	}
	
	/*
	 * Vector
	 */
	public static void vectorTest(){
		Vector<Object> vector = new Vector<Object>();
		vector.add(3);
		vector.add(2);
		vector.add(1);
		vector.add("a");
		vector.add("bcd");
		vector.add(4);
		// 遍历输出
		for (int i = 0; i < vector.size(); i++) {
			System.out.print(vector.get(i) + "  ");
		}

	}

}

 单纯的通过代码来观察,可能会觉得这三个东西好像没有什么区别。因为他们都是创建一个对象,然后在向里面add内容,然后在遍历输出。可是他们的本质是不同的。ArrayList显而易见是通过数组来实现的。数组这个可能就更了解了。与之相比LinkedList则是通过链表来实现的。数组与链表不同主要是数组他的物理地址是连续的。而链表则不是,链表则是有一块儿负责存放下一个单位的地址的区域。所以在执行一些操作上,例如向队列中添加元素的时候,数组则是要找到所添加的位置,再把从这个位置到末尾的数据都给复制一遍。而链表实现这些就不需要,他只需把前一位置所指向的地址改一下就行了,就像把链条卸开,在中间填一个铁环一样。

至于Vector向量这个呢。他也是通过数组来实现的。与ArrayList的不同就在Vector是线程安全的~~

他们之间也有相似的地方,例如你遍历他们输出的顺序,都是与他们的添加顺序是一样的。他们也都是有序可以重复的。

 

接下来总结一下HashSet和TreeSet。

 

package listTest;

import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;

public class Set {
	public static void main(String[] args) {
		System.out.println("HashSet测试:");
		hashSetTest();
		System.out.println("\n" + "TreeSet测试:");
		treeSetTest();
	}

	/*
	 * HashSet
	 */
	public static void hashSetTest() {
		HashSet<Object> hashSet = new HashSet<Object>();
		hashSet.add(3);
		hashSet.add(2);
		hashSet.add(1);
		hashSet.add(3);
		hashSet.add("a");
		hashSet.add("bcd");
		hashSet.add(4);

		System.out.println(hashSet);
		// 构建一个迭代器
		Iterator<Object> iterator = hashSet.iterator();
		while (iterator.hasNext()) {
			System.out.print(iterator.next() + "  ");
		}
	}

	/*
	 * TreeSet
	 */
	public static void treeSetTest() {
		TreeSet<Object> treeSet = new TreeSet<Object>();
		treeSet.add(3);
		treeSet.add(2);
		treeSet.add(1);
		treeSet.add(3);
		// treeSet.add("a");
		// treeSet.add("bcd");
		treeSet.add(4);

		System.out.println(treeSet);
		// 构建一个迭代器
		Iterator<Object> iterator = treeSet.iterator();
		while (iterator.hasNext()) {
			System.out.print(iterator.next() + "  ");
		}
	}
}

这个HashSet和TreeSet都是无序不可重复的。这里所说的无序指的是无论你的添加顺序如何,他最后通过迭代器输出的结果的顺序都是一样的。 如果添加进去同样的数据,则只会保留一个。

Set遍历输出的方法也不只限于使用迭代器。也可以直接通过System.out.println(set);来输出。

 

关于这几个集合框架,我平时使用的较多的就是ArrayList,可能也是水平有限所做的应用有限所以用不到那些比较高端的。可能对它们的理解也不是很透彻,有不足的地方还多望大神们指出!~谢谢~