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中的元素的地址使用系统的哈希