java034:集合框架的概念,List接口下的集合框架

一,集合:就是装数据的容器
集合和数组的区别:
1:数组是定长,集合无限制
2:数组存放同一类型的数据,集合可以放 任意类型的数据
3:集合只能存放类类型数据
框架:所有集合类的一个统称就是框架
在这里插入图片描述
二,Collection里面常用的api
不是说集合只存放类类型吗?为什么能存放8种基本类型?
原因是8种基本类型自动装箱,比如int装箱成Integer,然后Integer向上转型成Object,而Object是一个类类型。
在这里插入图片描述
增加:
add(Object):给集合里面添加元素
addAll(Collection):给集合里面加一个集合
删除:
Remove(Object):删除集合里面的一个元素
removeAll(Collection):删除一个集合里面的另一个集合
在这里插入图片描述
查询:
retainAll(Collection)把两个集合里面的交集存入第一个集合中

c.retainAll(c1);//把c和c1里面的交集放到c里面去

isEmpty():判断集合是否为空
Clear():清空集合
size():输出集合里元素个数
Contains(Object):一个集合是否包含某一个元素
ContainsAll(Collection):一个集合里是否完全包含另一个集合
toArray():将一个集合转成数组
Iterator():迭代器
简单的说,迭代器就是一个接口Iterator,实现了该接口的类就叫做可迭代类,这些类多数时候指的就是java.util包下的集合类。

hasNext():如果迭代器中还有元素,则返回true。
next():返回迭代器中的下一个元素
remove():删除迭代器新返回的元素。

在这里插入图片描述
三,List分支:
存储有顺序,元素能重复,可以根据下标查找元素(有索引)
c.add(0, “雷霆”):在0下标处加入“雷霆”
addAll(2, c1):在2下标处加入c1集合
indexOf(“红魔”):获取集合中元素的下标位置
c.get(3):获取集合对应下标处的元素
c.set(4, “煤老板”):改指定位置的值,把4下标的元素改成煤老板
c=c.subList(1, 4):(截取1到4位置的元素)截取新集合,含左不含右
listIterator():

ListIterator是一个功能更加强大的, 它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator, 还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。


在这里插入图片描述
####ArrayList:查询速度快,增删效率低,底层使用数组实现,集合的初始大小为10,每次集合放满的时候自动增加原来的一半
LinkedList:查询速度慢,增删效率高,底层使用链表实现
LinkedList下的常用api:
addFirst():给第一个位置添加元素
addLast():给最后一个位置添加元素
getFirst():获得集合中的第一个元素
getLast():获得集合中的最后一个元素
remove(0):删除0下标的元素
remove(“勇士”):删除对应元素
removeFirst():删除并返回第一个
removeLast():删除并返回最后一个
在这里插入图片描述
利用模板设计模式测一下ArrayList和linkedList的特点
1,测试增加效率:
主要是看执行前后的时间差

package 集合;
import java.util.ArrayList;
import java.util.LinkedList;
abstract class Template{//抽象类
	public void template(){
		long start=System.nanoTime();
		code();
		long end=System.nanoTime();
		System.out.println(end-start);
	}
	public abstract void code();
}
//**********************************************
class MyArrayList extends Template{
	ArrayList list=new ArrayList();
	public void code() {
		for (int i = 0; i <100000; i++) {
			list.add(0,1);
		}
	}	//ArrayList的添加速度
}
//**********************************************
class MyLinkedList extends Template{
	LinkedList list=new LinkedList();
	public void code() {
		for (int i = 0; i <100000; i++) {
			list.add(0,1);
		}
	}	//LinkedList的添加速度
}
//********************************************
public class Demo {
	public static void main(String[] args) {
		MyArrayList list=new MyArrayList();
		MyLinkedList list1=new MyLinkedList();
		list.template();
		list1.template();	
	}
}

结果:
在这里插入图片描述
2,测试查询效率:

package 集合;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
abstract class Template{
	public void template(){
		long start=System.nanoTime();
		code();
		long end=System.nanoTime();
		System.out.println(end-start);
	}
	public abstract void code();
}
//**********************************************
class MyArrayList extends Template{
	ArrayList list=new ArrayList();
	public void code() {
		for (int i = 0; i <100000; i++) {
			list.add(i);//加
		}
		for (int i = 0; i <100000; i++) {
			list.get(i);//查询
		}
	}
}
//**********************************************
class MyLinkedList extends Template{
	LinkedList list=new LinkedList();
	public void code() {
		for (int i = 0; i <100000; i++) {
			list.add(i);//加
		}
		for (int i = 0; i <100000; i++) {
			list.get(i);//查询
		}
	}
}
//***********************************************
public class Demo {
	public static void main(String[] args) {
		MyArrayList list=new MyArrayList();
		MyLinkedList list1=new MyLinkedList();
		list.template();
		list1.template();
	}
}

结果:
在这里插入图片描述
####**Vector:**向量,是最早的集合类(JDK1.0),现在已经过时了!
Vector现在不怎么用,是因为它自己的方法后面都要加一个Element。

     c.addElement("德玛");
	c.removeElement("德玛");

经典面试题
ArrayList和vector的区别:
1:ArrayList线程不安全,vector线程安全(加了锁)
2:ArrayList集合放满后每次增加原来的一半, vector增加为原来的一倍

Stack:栈(先进后出),继承自Vector,所以它也过期了
它里面的输入输出时push(),pop().
在这里插入图片描述
虽然它是个先进后出的栈结构,但是因为它继承了Vector,它也可以依靠循环按照顺序输出,所以他这就矛盾了,所以它过时了。
自定义一个栈的类:

package 集合;
import java.util.LinkedList;
public class MyStack {
	private LinkedList list=new LinkedList();
	//*************************************
	public void push(Object obj){//加元素
		list.add(obj);
	}
	//***************************
	public Object pop(){//删除并输出元素
		return list.removeLast();
	}
	//****************************
	public static void main(String[] args) {
		MyStack s=new MyStack();
		s.push("凉菜");
		s.push("烤肉");
		s.push("啤酒");
		s.push("冰封");
		System.out.println(s.pop());
		System.out.println(s.pop());
		System.out.println(s.pop());
		System.out.println(s.pop());
	}
}

输出结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44699728/article/details/90024684