JAVA16-List、ArrayList、LinkeList、Vector相关

List接口

在Collection接口的基础上扩展了下标这样的功能
在这里插入图片描述
注意:

//remove(int index) 和 remove(Object o)
		//当出现删除数字时,优先删除下标

ArrayList list=new ArrayList();
		list.add(1);
		//将值增加的到指定位置
		list.add(2);	
		list.remove(1);//将2删除

List接口的存储特点
相对有序存储,有下表(可以通过for循环遍历),允许包含重复值。

ArrayList类
ArrayList类是List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。ArrayList底层是数组,数组特点是在内存中有连续的空间,所以适合查询和更改以及遍历。

存储特点:
相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素,通过数组实现的集合
存储结构:数组
注意
//调用无参的构造方法,其底层将会给一个空的数组
//当第一次调用add方法时,数组的长度为10
当区间不够用的时候开始半数扩容

public class ListDemo {
	
	public static void main(String[] args) {
		
		
		
	
		ArrayList<DVD> list=new ArrayList<DVD>();
		
		list.add(new DVD("CD0001", "满城尽带黄金甲", "烂片"));
		list.add(new DVD("CD0002", "哪吒", "动漫"));
		list.add(new DVD("CD0003", "战狼", "主流片"));
		list.add(new DVD("CD0005", "倩女幽魂", "鬼片"));
		list.add(new DVD("CD0006", "2012", "灾难片"));
		
		//小for循环
		/*for (int i = 0; i <list.size(); i++) {
			System.out.println(list.get(i).toString());
		}*/
		//增强型for循环,适用于数组,集合
		for(DVD d:list){
			System.out.println(d.toString());
			
		}
		
		String[] ss={"123","456"};
		for(String s:ss){
			System.out.println(s);
		}
		
	}

}

Comparable接口

public class Student implements Comparable<Student>{
	private String name;
	private char sex;
	private int age;
	private int gread;//成绩
	public Student(String name, char sex, int age, int gread) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.gread = gread;
	}
	public Student() {
		super();
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getGread() {
		return gread;
	}
	public void setGread(int gread) {
		this.gread = gread;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", age=" + age + ", gread=" + gread + "]";
	}
	@Override
	public int compareTo(Student o) {
		if(this.gread==o.getGread()){
			return 0;
		}else if(this.gread>o.getGread()){
			return 1;
		}else{
			return -1;
		}
	}
	
	

}





package listDemo;

import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Collections;

/**
 * @author Eric 15665627080@163.com
 * @date 2019年8月13日
 * @time 下午2:20:47 package listDemo; public class Test{ } 类说明
 */
public class Test {

	public static void main(String[] args) {
		ArrayList<Student> list = new ArrayList<Student>();
		list.add(new Student("张三", '男', 18, 92));
		list.add(new Student("张三1", '男', 18, 86));
		list.add(new Student("张三2", '女', 18, 73));
		list.add(new Student("张三3", '女', 18, 92));

		list.add(new Student("张三4", '女', 18, 92));
		list.add(new Student("张三5", '女', 18, 36));
		list.add(new Student("张三6", '男', 18, 92));
		list.add(new Student("张三7", '男', 18, 30));
		list.add(new Student("张三8", '女', 18, 63));

		list.add(new Student("张三9", '男', 18, 92));
		list.add(new Student("张三10", '男', 18, 98));
	
		for(Student s:list){
			System.out.println(s.toString());
		}
		
		
		
		
		Collections.sort(list);
		
		System.out.println("***************************");
		for(Student s:list){
			System.out.println(s.toString());
		}
	}

}


总结
如果想使用Collections.sort()的方法对集合进行排序
1.首先泛型类型的javaBean必须实现Comparable接口,并且将T改成该Bean类型
2.重写compareTo方法,重设对象之间排序条件,此时用属性进行对比,返回正数,0,负数即可(具体升序降序,看你返回的数)
3.如果对对象数组也想使用Arrays.sort(),同理

LinkedList类
LinkedList类是List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。
存储特点:
相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素,通过链表实现的集合
存储结构:双向链表
在这里插入图片描述

public class Demo5 {
	public static void main(String[] args) {
		//创建集合
		LinkedList<String> linkedList=new LinkedList<>();
		//1添加元素
		linkedList.add("苹果");
		linkedList.add("葡萄");
		linkedList.add("西瓜");
		linkedList.add("芒果");
		linkedList.add("桃子");
	
		System.out.println("元素个数:"+linkedList.size());
		System.out.println("打印:"+linkedList.toString());
		//2删除
//		linkedList.remove(0);
//		System.out.println("删除之后:"+linkedList.toString());
		//3遍历
		//3.1for
		//3.2foreach
		//3.3迭代器
		System.out.println("-----------迭代器-----------");
		Iterator<String> it = linkedList.iterator();
		
		
		//4判断
		System.out.println("isEmpty:"+linkedList.isEmpty());
		System.out.println("苹果:"+linkedList.contains("苹果"));
		//5查找位置
		System.out.println("桃子的位置:"+linkedList.indexOf("桃子"));
		
	}
}

ArrayList和LinkedList的总结
ArrayList存储结构是数组,LinkedLis存储结构是链表
ArrayList集合适用在对元素查询、遍历操作,不适合插入和删除。
LinkedList集合适用在对元素插入和删除操作,不适合遍历和查找。

Vector
Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是Vector
的大小可以根据需要增大或缩小,以适应创建 Vector后进行添加或移除项的操作。

public static void main(String[] args) {
		//创建集合
		Vector<String> vector=new Vector<>();
		//1添加元素
		vector.add("xxx");
		vector.add("yyy");
		vector.add("zzz");
		System.out.println(vector.toString());
		//2删除
//		vector.remove(0);
//		System.out.println("删除之后:"+vector.toString());
		//3遍历
		//3.1for
		//3.2foreach
		//3.3迭代器
		//3.4枚举器
		Enumeration<String> elements = vector.elements();
		while(elements.hasMoreElements()) {
			System.out.println(elements.nextElement());
		}

Stack
Stack类表示后进先出(LIFO)的对象栈。是Vector的子类。
堆栈结构先进后出
队列结构是先进先出

public static void main(String[] args) {
		//创建集合(先进后出,后进先出)
		Stack<String> stack=new Stack<>();
		//1入栈
		stack.push("abc");
		stack.push("hello");
		stack.push("你好");
		stack.push("他好");
		stack.push("大家好");
		//2出栈
		System.out.println("---------出栈---------");
		int size=stack.size();
		for(int i=0;i<size;i++) {
			String s=stack.pop();
			System.out.println(s);
		}
	}

ArrayList与LinkedList,Vector三种实现类存储的比较
a.功能基本相同
b.底层存储结构:ArrayList是数组,LinkedList是链表,Vector是数组
c.Vector是一个古老的集合,从JDK1.0开始就有了,Vector存在一些方法名比较长的方法,xxxElement
d.Vector是线程安全的,效率低,ArrayList是线程不安全的,效率高,推荐使用ArrayList【Collections工具类中有相应的方法可以将ArrayList改为线程安全的】
e.ArrayList查找遍历比较快,LinkedList插入删除比较快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值