Java中List集合

前言

记录并温习学过的List集合,也希望可以帮到大家(如果哪里记录的不正确,请各位批评指正)

ArrayList

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

public class ArrayListTest {
	public static void main(String[] args) {
		// List 代表一个元素有序,且可以重复的集合,集合中的每个元素都有其对应的索引
		// List允许元素重复,可以通过索引来访问指定位置的集合元素
		// List默认按元素的添加顺序设置元素的索引
		// List中添加了一些根据索引来操作集合元素的方法
		List<String> list = new ArrayList<String>();
		list.add("b"); // 第一个索引下标为0
		list.add("c"); // 索引下标为1
		list.add("d"); // 索引下标为2
		list.add("a"); // 索引下标为3
		list.add("d"); // 允许有重复的元素
		System.out.println(list);
		System.out.println(list.get(1)); // 通过索引来访问指定位置的集合元素
		
		list.add(1,"h"); // 在指定索引下标的位置插入数据
		System.out.println(list);
		
		List<String> l = new ArrayList<String>();
		 // 在指定索引下标的位置插入集合
		l.add("aaa");
		list.addAll(2,l);
		System.out.println(list);
		
		// 获取指定元素在集合中第一次出现的索引下标
		System.out.println(list.indexOf("d"));
		// 获取指定元素在集合中最后一次出现的索引下标
		System.out.println(list.lastIndexOf("d"));
		
		// 根据指定的索引下标移除数据
		list.remove(2);
		System.out.println(list);
		
		// 根据指定的索引下标移除数据
		list.set(1, "hh");
		System.out.println(list);
		
		// 根据索引下标位置截取一段元素形成新的集合,包含截取开始时的索引,不包含结束时候的索引(>=2 <4)
		List<String> sublist = list.subList(2, 4); // 去索引下标大于等于2,小于4
		System.out.println("截取后新的集合:" + sublist);
		
		// 集合的长度
		System.out.println("集合的长度:" + list.size());
		
		// 遍历
		// 1.根据下标
		System.out.println("根据下标遍历:");
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i));
		}
		System.out.println();
		// 2.for-each遍历
		System.out.println("for-each遍历:");
		for (String str : list) {
			System.out.print(str);
		}
		System.out.println();
		
		
		/*  删除集合中元素出现问题
		 	使用for-each循环遍历集合,遍历过程中对集合进行删除操作
		 	因此出现异常java.util.ConcurrentModificationException
		 	解决方式:使用迭代器
		 */
		Iterator<String> it = list.iterator();
		while (it.hasNext()) { // hasNext 判断下一位是否有元素
			String stri = it.next(); // next() 获取当前元素
			if (stri.equals("a")) {
				it.remove();
			}
		}
		
	}

}

LinkedList

import java.util.LinkedList;

public class LinkedListTest {
	/*
		除了ArrayList的基本操作之外,
		还额外提供了几种方法:
		getFirst()/getLast() 
		removeFirst()/removeLast() 
		addFirst()/addLast()
	*/
	public static void main(String[] args) {
		LinkedList<String> lls=new LinkedList<>();
		lls.add("a");
		lls.add("aa");
		lls.addFirst("c"); // 在集合第一个位置上添加元素
		lls.addLast("b"); // 在集合最后一个位置上添加元素
		lls.removeFirst(); // 删除集合中第一个位置元素
		lls.removeLast(); // 删除集合中最后一个位置元素
		System.out.println("第一位上元素:" + lls.getFirst());
		System.out.println("最后一位上元素:" + lls.getLast());
		
		// 模拟堆栈
		LinkedList<String> list = new LinkedList<>(); // 构建空栈
		list.push("A");// 使用堆栈的方式存入集合中
		list.push("B");
		list.push("C");

		for (String string : list) {
			System.out.print(string + "\t");// C B A
		}
		
		LinkedList<String> llist = new LinkedList<>();
		llist.add("A");// 使用队列的方式存入集合中
		llist.add("B");
		llist.add("C");
		for (String string : llist) {
			System.out.print(string + "\t");// A B C
		}



	}

}

ArrayList和LinkedList

相同点:

1.都是List接口的实现类,可变长度的集合实现
2.元素有序(集合中存储的元素和插入顺序相同)可重复
3.都允许存放null
4.都支持泛型(Generic)
5.都是不同步,线程不安全

不同点:
ArrayListTestLinkedList
动态数组的数据结构链表的数据结构
新增了操作链表头部和尾部的方法
顺序存储链式存储
get(index)通过索引可以随机访问集合中任意一个元素,适用于查询get(index)按照顺序从链表一端开始检索,直到另外一端
add、remove 需要移动集合中的元素add、remove 只需要对指针指向的进行修改适用于删除/添加
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值