您的位置:首页 > 其它

List集合的子实现类及其特点

2017-11-15 16:07 162 查看
ArrayList: 底层数据结构是数组形式,满足数组结构的特点:查询快,增删慢

从线程安全问题角度看:线程不安全,不同步,执行效率高。

vector: 底层结构是数组形式,查询快,增删慢

从线程安全问题角度看:线程安全,同步,执行效率低

LinkedList:底层数据结构是链接列表,查询慢,增删快

从线程安全问题角度看:线程不安全,不同步,执行效率高。

如果实现多线程程序,一般要是安全的类:

StringBuffer,Vector<E>,hashtable<K,V>


如果在一般的需求中没有指明使用集合去完成,都默认采用ArrayList如果需求中要考虑线程安全,那么使用Vector集合!

package _09.homework;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo {
public static void main(String[] args){
ArrayList<String> array=new ArrayList<String>();
array.add("八百里分麾下之,");
array.add("五十弦翻塞外声,");
array.add("沙场秋点兵!");
Iterator<String>it=array.iterator();
while(it.hasNext()){
String s=it.next();
System.out.print(s);
}
}
}


Vector的特有功能:

public void addElement(E obj)//相当于:add(object e)


public Enumeration<E> elements()//相当于:Iterator iterator()


Enumeration接口:向量的组件枚举有两个方法

boolean hasMoreElements();//相当于:hasNext()


Object nextElement();//相当于:next();


package _09.homework;

import java.util.Enumeration;
import java.util.Vector;

public class VectorDemo {
public static void main(String[] args) {
Vector<String> v = new Vector<String>();
v.addElement("花好");
v.addElement("月圆");
v.addElement("人长久");
v.addElement("!");
Enumeration<String> en = v.elements();
while (en.hasMoreElements()) {
String s = en.nextElement();
System.out.print(s);
}
}
}


特有功能:

添加功能:

public void addFirst(E e)//将指定元素插入此列表的开头。

public void addLast(E e)//将指定元素添加到此列表的结尾。

获取功能:

public Object getFirst()//返回此列表的第一个元素

public Object getLast()//返回此列表的最后一个元素。

删除功能:

public Object removeFirst()//移除并返回此列表的第一个元素。

public Object removeLast()//移除并返回此列表的最后一个元素

public class LinkedListDemo {
public static void main(String[] args) {
LinkedList link = new LinkedList() ;
//添加元素
link.addFirst("明月几时有,") ;
link.addFirst("把酒问青天。") ;
link.addFirst("不知天上宫阙,") ;
link.addFirst("今夕是何年。")
/*
Object obj = link.getFirst() ;
System.out.println(obj);
Object obj2 = link.getLast() ;
System.out.println(obj2);*/
/*System.out.println("removeFirst:"+link.removeFirst());
System.out.println("removeLast:"+link.removeLast());*/

System.out.println("link:"+link);
}
}


contains()底层依赖于一个equals()方法,equals()方法是Object类的中的方法,该法默认比较的是对象的地址值是否相同,必须要重写Object中的eqauls()方法,才能比较内容是否相同;

在自定义对象的类中重写Object中的equasl()方法,才能比较成员变量的值是否相同

public class ArrayListTest3 {

public static void main(String[] args) {

//创建一个ArrayList集合对象
ArrayList array = new ArrayList() ;

//2)创建学生对象
Student s1 = new Student("高圆圆", 27) ;
Student s2 = new Student("高圆圆", 20) ;
Student s3 = new Student("邓超", 29) ;
Student s4 = new Student("邓超", 25) ;
Student s5 = new Student("黄晓明", 30) ;
Student s6 = new Student("高圆圆", 27) ;

//将学生对象添加到array集合中
array.add(s1) ;
array.add(s2) ;
array.add(s3) ;
array.add(s4) ;
array.add(s5) ;
array.add(s6) ;

//3)创建一个新集合
ArrayList newArray = new ArrayList() ;

//遍历旧集合,获取迭代器对象
Iterator it = array.iterator() ;
while(it.hasNext()){
Student s = (Student) it.next() ;

//判断新集合中是否包含这些对象
if(!newArray.contains(s)){
//不包含的对象才能添加新集合
newArray.add(s) ;
}
}

//遍历新集合
Iterator it2 = newArray.iterator() ;
while(it2.hasNext()){
Student s = (Student) it2.next() ;
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐