Java学习笔记-------集合List

List 集合
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引(从0开始)

1.List 接口和 Listlterator 接口
  List是Colection接口的子接口,可以使用Colection借口的全部方法。List是有序集合,还提供了一些
根据索引来操作集合元素的方法:
	 1.1 void add(int index, E element) 
			  在列表的指定位置element插入指定元素index。 
	 1.2 boolean addAll(int index, Collection<? extends E> c) 
			  将指定 collection 中的所有元素都插入到列表中的指定位置index。   
	 1.3 Object get(int index) 
			  返回列表中指定位置的元素。  
	 1.4 int indexOf(Object o) 
			  返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。   
	 1.5 int lastIndexOf(Object o) 
			  返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。  
	 1.6 Object remove(int index) 
			  移除列表中指定位置的元素(可选操作)。   
	 1.7 Object set(int index, Object element) 
			  用指定元素替换列表中指定位置的元素(可选操作)。  
	 1.8 List<E> subList(int fromIndex, int toIndex) 
			  返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。  
eg:
import java.util.ArrayList;
import java.util.List;

public class ListTest {
	public static void main(String[] args) {
		List books = new ArrayList();
		// 向books添加元素
		books.add(new String("Abooks"));
		books.add(new String("Bbooks"));
		books.add(new String("Cbooks"));
		System.out.println(books);
		// 向第二个位置插入元素
		books.add(1, "B2books");
		System.out.println(books);
		// 通过for遍历集合,逐个输出
		for (int i = 0; i < books.size(); i++) {
			System.out.println(books.get(i));
		}
		// 删除第三个元素
		books.remove(2);
		System.out.println(books);
		// 判断指定元素在集合中位置
		System.out.println(books.indexOf("B2books"));
		// 将指定元素位置替换成新元素
		books.set(2, "B222books");
		System.out.println(books);
		// 将books集合的第二个元素包括到第三个元素(不包括)截取成新集合
		System.out.println(books.subList(1, 2));

	}
}
运行结果:
		[Abooks, Bbooks, Cbooks]
		[Abooks, B2books, Bbooks, Cbooks]
		Abooks
		B2books
		Bbooks
		Cbooks
		[Abooks, B2books, Cbooks]
		1
		[Abooks, B2books, B222books]
		[B2books]

2.ArrayList 和 Vector 实现类
  ArrayList和Vector作为List类的两个典型实现,完全支持List借口的全部功能。
  ArrayList和Vector还提供了两个方法来重新分配Object[]数组。
	2.1 void ensureCapacity(int minCapacity):
			将ArrayList或者Vector集合的Object[]数组长度增加minCapacity。
	2.2 void trimTosize():
			调整集合的Object[]数组长度为当前元素的个数。程序可调用该方法来减少集合对象的存储空间。
ArrayList 和 Vector 比较
	1).ArrayList 线程是不安全的,当多个线程访问同一个ArrayList集合时,超过一个线程修改ArrayList集合,
	   则程序必须手动保证该集合的同步性。
	2).Vector是线程安全的,但是性能比ArrayList低,而且不推荐使用Vector。

3.LinkedList 实现类
	LinkedList是功能非常强大的集合类,可以作为双端队列和栈的用法。LinkedList内部以链表的i型你改是来保存集合中的元素,因此随机访问
性能较差,插入和删除元素性男女非常出色。
eg:
import java.util.LinkedList;

public class LinkedListTest {
	public static void main(String[] args) {
		LinkedList books = new LinkedList();
		// 将字符串元素加入队列尾部
		books.offer("Abook");
		// 将一个字符串元素加入栈底部
		books.push("Bbook");
		// 将字符串元素添加到队列的头部,
		books.offerFirst("Cbook");
		for (int i = 0; i < books.size(); i++) {
			System.out.println(books.get(i));
		}
		// 访问但不删除栈顶的元素
		System.out.println(books.peekFirst());
		// 访问但不删除队列最后一个元素
		System.out.println(books.peekLast());
		// 将栈顶部的元素弹出“栈”
		System.out.println(books.pop());
		System.out.println(books);
		// 访问并删除队列的最后一个元素
		System.out.println(books.pollLast());
		System.out.println(books);
	}
}
运行结果:
		Cbook
		Bbook
		Abook
		Cbook
		Abook
		Cbook
		[Bbook, Abook]
		Abook
		[Bbook]
4.List排序
eg:
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class LinkListSortTest {
	public static void main(String[] args) {
		List<String> ls1 = new LinkedList<>();
		List<String> ls2 = new LinkedList<>();
		for (int i = 0; i < 9; i++) {
			ls1.add("a" + i);
		}
		System.out.println(ls1);
		// 随机排序
		Collections.shuffle(ls1);
		System.out.println(ls1);
		// 顺序排序
		Collections.sort(ls1);
		System.out.println(ls1);
		// 折半查找 必须先排序
		System.out.println(Collections.binarySearch(ls1, "a5"));
		// 逆序排序
		Collections.reverse(ls1);
		System.out.println(ls1);

	}
}

5.各种线性表的性能分析
随机排名:数组>ArrayList/ArrayDeque>Vector>LinkedList
迭代操作排名:LinkedList>ArrayList>ArrayList/Vector
插入操作排名:LinkedList>ArrayList>ArrayList/Vector
删除操作排名:LinkedList>ArrayList>ArrayList/Vector
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值