list接口下的实现类ArrayList
是JDk1.2出现的
特点:查询速度快,增删慢。
ArrayList底层是维护了一个Object数组实现的,使用无参构造函数时,Object数组默认的容量是10长度不够时自动增长0.5倍
特有方法
ensoureCapacity(int minCapacity)
trimToSize()调整当前集合大小(删掉多余数组空间)
list接口下的实现类LinledList
Linked List底层时使用了链表数据实现的
特点:查询速度慢,增删快。
特有的方法
1:方法介绍
addFirst(E e) 把元素添加到集合的首位
addLast(E e) 把原始添加到集合的末尾处
getFirst() 获取集合中首位置的元素
getLast() 获取集合中末位置的元素
removeFirst() 删除集合中的首位置元素并返回
removeLast()删除集合中的末尾元素并返回 2:数据结构
1:栈 (1.6) : 主要是用于实现堆栈数据结构的存储方式。
先进后出
push() 将元素推入此列表所表示的堆栈,换句话说将元素插入到集合的开头处
pop() 从此列表所表示的堆栈处弹出一个元素,换句话说移除并返回此列表的第一个元素
2:队列(双端队列1.5): 主要是为了让你们可以使用LinkedList模拟队列数据结构的存储方式。
先进先出
offer() 将制定元素添加到此列表的末尾(最后一个元素)
poll()返回集合中首位置的元素并删除集合中首位置的元素
3:返回逆序的迭代器对象 descendingIterator() 返回逆序的迭代器对象
用LinkedList模拟堆栈和队列的储存方式
package collection;
import java.util.*;
class StackList{//模拟堆栈的储存方式
LinkedList list;
public StackList(){
list = new LinkedList();
}
public void add(Object o){
list.push(o);
}
public Object delete(){
return list.pop();
}
public int size(){
return list.size();
}
}
class TeamList{//模拟队列的储存方式
LinkedList list;
public TeamList(){
list = new LinkedList();
}
public void add(Object o){
list.offer(o);
}
public Object remove(){
return list.poll();
}
//获取元素个数
public int size(){
return list.size();
}
}
public class collection03 {
public static void main(String[] args){
TeamList list= new TeamList();
list.add("李嘉诚");
list.add("马云");
list.add("王健林");
int size = list.size();//创建变量储存集合长度
for(int i = 0 ; i<size ; i++){
System.out.println(list.remove());
}
}
}
实战
用LinkedList存储一副扑克牌并实现洗牌功能
package collection;
import java.util.*;
public class colllection04 {
LinkedList list;
public static void main(String[] args){
System.out.println(reform(creatpoke()));
}
public static LinkedList creatpoke(){//创建一副扑克
String[] color = {"黑桃","红桃","黑片","红片"};
String[] number = {"2","3","4","5","6","7","8","9","10","J","O","K","A"};
LinkedList list = new LinkedList();
for(int i=0;i<4;i++){
for(int j=0;j<13;j++){
list.addLast(color[i]+number[j]);
}
}
list.addLast("大王");
list.addLast("小王");
System.out.println("创建了一副扑克:"+list);
return list;
}
public static LinkedList reform(LinkedList list){//洗牌 通过使用Random随机数对数组进行移除和插入操作
int size = list.size();
for(int i=0;i<100;i++){
Random r = new Random();
int temp = r.nextInt(size);
Object l = list.remove(temp);
list.add(r.nextInt(size), l);
}
return list;
}
}
list接口下的实现类Vector
是JDK1.0出现的
底层维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。