list接口三个常用的子实现类:ArrayList,Vector和linkedlist
List集合子类的特点:
1> ArrayList(默认使用此类)
内部是一种数组实现,查询快,增删慢
线程不安全,--à不同步-à执行效率高
2>Vector:
底层是一种数组实现,查询快,增删慢
线程安全的类,同步-à执行效率低
StringBuffer:线程安全的类
3>LinkedList:
底层是一种链接链表实现,查询慢,增删快,
线程不安全,不同步-à执行效率高
一.Arraylist类
遍历功能:
1)一个是Collection的iterator()
2)size()和get(int index)普通for循环
举例:
1. package org.westos_04;
2. import java.util.ArrayList;
3. import java.util.Iterator;
4. import java.util.List;
5. import java.util.concurrent.SynchronousQueue;
6. public class ListTest3 {
7.
8. publicstatic void main(String[] args) {
9. //创建集合对象
10. Listlist = new ArrayList() ;
11. //创建4个学生对象
12. Students1 = new Student("高圆圆", 27) ;
13. Students2 = new Student("赵又廷", 30) ;
14. Students3 = new Student("文章", 29) ;
15. Students4 = new Student("马伊琍", 39) ;
16. list.add(s1);
17. list.add(s2);
18. list.add(s3);
19. list.add(s4);
20. //方式1:获取迭代器的方式
21. Iteratorit = list.iterator() ;
22. while(it.hasNext()){
23. Students = (Student)it.next;
24. System.out.println(s.getName()+"---"+s.getAge());
25. }
26. System.out.println("--------------------------");
27. //方式2:size()和get(intindex)结合: 普通for循环
28. for(intx =0 ;x < list.size() ; x ++) {
29. Students = (Student)list.get(x) ;
30. System.out.println(s.getName()+"---"+s.getAge());
31. }
32. }
33. }
这里我们需要注意一个问题,我们举例说明
例题
需求:给集合中添加重复的元素(字符串类型),将重复的元素从集合去除掉!
分析:
1)创建一个旧集合,添加重复元素
2)创建一个新集合
3)遍历旧集合中的元素获取到每一个元素
在旧集合中判断新集合中是否包含旧集合中的元素
包含,不搭理
不包含,添加到新集合中
4) 遍历新集合
public class ArrayListTest {
public static void main(String[] args) {
//创建一个集合
ArrayList list = new ArrayList() ;
//添加元素
list.add("hello") ;
list.add("world") ;
list.add("java") ;
list.add("javaee") ;
list.add("hello") ;
list.add("world") ;
list.add("hello") ;
list.add("javaee") ;
list.add("android") ;
list.add("python") ;
list.add("php") ;
list.add("php") ;
//创建一个新的集合
ArrayList newList = new ArrayList() ;
//遍历旧集合
Iterator it = list.iterator() ;
while(it.hasNext()) {
String s = (String) it.next() ;
//判断新集合中是否包含旧集合中的元素
if(!newList.contains(s)) {
newList.add(s) ;
}
}
//遍历新集合
Iterator it2 = newList.iterator() ;
while(it2.hasNext()) {
String s = (String) it2.next() ;
System.out.println(s);
}
}
需求:使用集合ArrayList存储自定义对象(Student),去除重复的对象
问题:按照存储字符串(新建集合的思想)的形式来去存储自定义对象,发现自定义对象并没有去重,为什么?
contains方法底层依赖于equals方法
equals方法默认比较的是地址值,如果想让equals()方法比较他们的内容是否相同,需要重写equals(),
也就意味着存储自定义类,必须重写
equals()方法,这样才能比较的是这些对象的内容是否相同
public class ArrayListTest3 {
public static void main(String[] args) {
//创建一个ArrayList集合
ArrayList array = new ArrayList() ;
//创建4个学锁对象
Student s1 = new Student("高圆圆", 27);
Student s2 = new Student("文章", 29);
Student s3 = new Student("王力宏", 30);
Student s4 = new Student("高圆圆", 27);
Student s5 = new Student("高圆圆", 29);
array.add(s1) ;
array.add(s2) ;
array.add(s3) ;
array.add(s4) ;
array.add(s5) ;
//创建一个新集合
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());
}
}
}
二.Vector类
特有功能:
1>public void addElement(Object obj)------->add(Object obj)
2>public Enumeration elements():返回此向量的枚举
--->相当于:public Iterator iterator()
3>boolean hasMoreElements() --->boolean hasNext() ;
4>Object nextElement() --->Object next() ;
举例:
public class VectorDemo {
public static void main(String[] args) {
//创建集合对象
Vector v = new Vector() ;
//添加元素
v.addElement("hello");
v.addElement("world");
v.addElement("java");
//遍历
//获取Enumeration :向量的枚举
Enumeration en = v.elements() ;
while(en.hasMoreElements()) {
String s = (String)en.nextElement() ;
System.out.println(s);
}
}
}
三. LinkedList类
特有功能:
添加功能
addFirst(Object e):将指定的元素插入到列表的开头
addLast(object e):将指定的元素添加到列表末尾
获取功能:
getFirst():获取列表第一个元素
getLast():获取列表最后一个元素
删除功能
public Object removeFirst()移除并返回此列表的第一个元素。
public Object removeLast()移除并返回此列表的最后一个元素
举例:
public class LinkedListDemo {
public static void main(String[] args) {
//创建LinkedList集合对象
LinkedList link = new LinkedList() ;
//添加元素
link.add("hello");
link.add("world");
link.add("java");
System.out.println("link:"+link);
//addFirst(Object e):将指定的元素插入到列表的开头
link.addFirst("android");
System.out.println("link:"+link);
link.addLast("mysql");
System.out.println(link);
//getFirst():获取列表第一个元素
System.out.println(link.getFirst());
System.out.println(link.getLast());
//public Object removeFirst()移除并返回此列表的第一个元素。
System.out.println("removeFirst():"+link.removeFirst());
System.out.println(link);
//public Object removeLast()移除并返回此列表的最后一个元素。
System.out.println(link.removeLast());
}
}
可总结出linkedlist的特点:元素先进后出