一、已实现子类
1,Vector(几乎不再使用)
2,LinkedList
1,内部是链表数据结构,是不同步的。增删元素的速度很快
2,部分方法
addFirst();//添加元素
addLast():
//jdk1.6版本以后出现的新技术
offerFirst();//添加元素
offetLast();
getFirst();.//获取但不移除,如果链表为空,抛出NoSuchElementException.
getLast();
//jdk1.6版本以后出现的新技术
peekFirst();//获取但不移除,如果链表为空,返回null.
peekLast():
removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementException.
removeLast();
//jdk1.6版本以后出现的新技术
pollFirst();//获取并移除,如果链表为空,返回null.
pollLast();
3,练习
例:请使用LinkedList来模拟一个堆栈或者队列数据结构。
堆栈:先进后出 First In Last Out FILO
队列:先进先出 First In First Out FIFO
代码示例:
1,队列
public class DuiLie {
private LinkedList link;
DuiLie(){
link = new LinkedList();
}
public void myAdd(Object obj) {
link.addLast(obj);
}
public Object myGet() {
return link.removeFirst();
}
public boolean isNull() {
return link.isEmpty();
}
}
2,堆栈
public class DuiZhan {
private LinkedList linkedList;
public DuiZhan() {
linkedList = new LinkedList();
}
public void myAdd(Object obj) {
linkedList.addLast(obj);
}
public Object myGet() {
return linkedList.removeLast();
}
public boolean isNull() {
return linkedList.isEmpty();
}
}
测试代码
public class Test {
public static void main(String[] args) {
System.out.println("duilie:");
new Test().showDuiLie();
System.out.println("-------------------------------------");
System.out.println("duizhan:");
new Test().showDuiZhan();
}
public static void showDuiLie() {
DuiLie DL = new DuiLie();
DL.myAdd("abc1");
DL.myAdd("abc2");
DL.myAdd("abc3");
DL.myAdd("abc4");
while(!DL.isNull()) {
System.out.println(DL.myGet());
}
}
public void showDuiZhan() {
DuiZhan duiZhan = new DuiZhan();
duiZhan.myAdd("def1");
duiZhan.myAdd("def2");
duiZhan.myAdd("def3");
duiZhan.myAdd("def4");
while(!duiZhan.isNull()) {
System.out.println(duiZhan.myGet());
}
}
}
运行结果:
3,ArrayList
1,内部是数组数据结构,是不同步的。替代了Vector。查询的速度快
2,部分方法
3,练习
例:定义功能去除ArrayList中的重复元素
代码示例:
1,Person类
public class Person implements Comparable {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return name.hashCode()+age*27;
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
if(!(obj instanceof Person))
throw new ClassCastException("类型错误");
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return name+":"+age;
}
@Override
public int compareTo(Object o) {
Person p = (Person)o;
int temp = this.age-p.age;
return temp==0?this.name.compareTo(p.name):temp;
}
}
2,测试代码
public class ArrayListTest2 {
/**
* @param args
*/
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));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
System.out.println(al);
al = getSingleElement(al);
System.out.println(al);
}
public static ArrayList getSingleElement(ArrayList al) {
//1,定义一个临时容器。
ArrayList temp = new ArrayList();
//2,迭代al集合。
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
//3,判断被迭代到的元素是否在临时容器存在。
if(!temp.contains(obj)){
temp.add(obj);
}
}
return temp;
}
运行结果: