Java基础16--集合框架(一)

2014-11-24 07:32:11 · 作者: · 浏览: 4

16-1,集合框架Vector集合

1,Vector是向量,底层为数组结构,可以通过其elements()方法获取一个Enumeration对象,这个对象的功能于Iterator的功能相同,Iterator比他多了移除的操作,所以现在一般不用Vector,都用Iterator。

通过Enumeration迭代Vector集合的元素示例:

public class VectorDemo {
	public static void main(String[] args) {
		Vector v = new Vector();
		v.addElement("abc1");
		v.addElement("abc2");
		v.addElement("abc3");
		v.addElement("abc4");
		Enumeration en = v.elements();
		while(en.hasMoreElements()) {
			System.out.println("nextElements:" + en.nextElement());
		}
		Iterator it = v.iterator();
		while(it.hasNext()) {
			System.out.println("next:" + it.next());
		}
	}
}

用Iterator替代Enumeration是因为Enumeration和里面的方法名字太长,简化书写。

16-2,LinkedList集合

1,基本操作

addFirst():向头部添加一个元素。

getFirst():获取第一个元素但不删除。

removeFirst():获取第一个元素并删除。

2,示例:

public class Demo {
	public static void main(String[] args) {
		LinkedList link = new LinkedList();
		link.addFirst("abc1");
		link.addFirst("abc2");
		link.addFirst("abc3");
		link.addFirst("abc4");
		System.out.println(link);
		System.out.println(link.getFirst());//abc4
		System.out.println(link.getFirst());//abc4,不删除
		//System.out.println(link.removeFirst());//abc4
		//System.out.println(link.removeFirst());//abc3
		while(!link.isEmpty()) {
			System.out.println(link.removeLast());//abc1,abc2,abc3,abc4
		}
	}
}

16-3,LinkedList练习-模拟栈和队列

需求:请使用LinkedList来模拟一个堆栈或者队列数据结构。

堆栈:先进后出。

队列:先进先出。

我们应该描述一个这样的容器,给使用者提供一个容器对象完成这两种结构中的一种。

public class LinkedTest {
	public static void main(String[] args) {
		DuiLie d1 = new DuiLie();
		d1.myAdd("abc1");
		d1.myAdd("abc2");
		d1.myAdd("abc3");
		d1.myAdd("abc4");
		while(!d1.isNull()) {
			System.out.println(d1.myGet());
		}
	}
}
class Duilie {
	private LinkedList list;
	public DuiLie() {
		list = new LinkedList();
	}
	//队列的添加元素功能
	public void myAdd(Object obj) {
		list.addLast(obj);
	}
	public Object myGet() {
		return list.removeFirst();
	}
	public boolean isNull() {
		return list.isEmpty();
	}
}

实现了队列。

16-4,ArrayList存储自定义对象

例如存储Person对象。

Person类:

public class Person {
	private String name;
	private int age;
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return this.age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

ArrayList存储自定义对象Person类。

public class ArrayListTest {
	public static void main(String[] args) {
		ArrayList al = new ArrayList();
		al.add(new Person("lisi1",21));
		al.add(new Person("lisi2",22));
		al.add(new Person("lisi3",23));
		al.add(new Person("lisi4",24));
		Iterator it = al.iterator();
		while(it.hasNext()) {
			//System.out.println(((Person)it.next()).getName()+"::"+((Person)it.next()).getAge());
			/*
			上面这种方法会出现错误结果,在SOP中,每next一次,就想下走一个对象,也就是说,
			第一个next读的是lisi1的name,然后跳转至下一个对象,后面的next读的是lisi2的age,
			所以出现lisi1,22,lisi3,24的结果;
			下面的方法,先创建一个对象把读取的对象赋给p,再SOP就不会出错了。
			*/
			Person p = (Person)it.next();
			System.out.println(p.getName()+"---"+p.getAge());
		}
	}
}

16-5,HashSet集合

1,Set集合:元素不可以重复,取出元素的顺序和存入的顺序不一定一致,是无序的。无序是因为HashSet中的元素的地址使用系统的哈希