JAVA学习日记:集合框架(3)

本节课我学习的主要内容有:

List接口
ArrayList类
LinkedList类

List接口:

泛型接口
 		顺序存储结构,可以存放相同的元素,包括NULL
  		
  		顺序表中存放的元素都对应的提供了一个整数索引值。
  		我们可以通过这个索引值来对数据进行一系列操作。
  		
  		get(int index)得到index索引位置处的值。
 		indexOf(Object o)得到o在表中的位置。
 		add(int index,Object o)在索引为index的位置存入o。
  		subList(int fromIndex,int toIndex)截取当前顺序表中从fromIndex处(包含fromIndex)开始到toIndex(不包含toIndex)之间的顺序表子表。
  		listIterator()双向遍历顺序表。
  		
  		ArrayList适合随机查询情况多的情况下来使用。

ArrayList类:

可变长度数组,元素之间的关系是前驱后继的,容量每次增加原来的一半。
  		构造方法:
  			List<E>/ArrayList<E> name = new ArrayList<E>();建立一个空顺序表(可变长度数组形式)。
  			List<E>/ArrayList<E> name = new ArrayList<E>(int capacity)建立一个初始指定长度的空顺序表。
  			List<E>/ArrayList<E> name = new ArrayList<E>(Collection c)将集合c建立成一个顺序表。

LinkedList类:

		双向链表,查询优化,提供二分查找,链表元素之间的关系是没有前驱后继的。
  			List<E>/LinkedList<E> name = new LinkedList<E>();建立一个空顺序表(数组形式)。
  			List<E>/LinkedList<E> name = new LinkedList<E>(Collection c)将集合c建立成一个顺序表。
  		
  			LinkedList适合元素插入和删除多的情况下来使用
  			
  		新增的方法:
  			void addFirst/Last(Object o) 将o插入表头/表尾。
  			Object getFirst/Last() 获得表头/表尾。
  			Object removeFirst/Last() 移除并返回表头/表尾。
 			Object peekFrist/Last() 检索表头/表尾元素不进行操作。
  			Object pollFrist/Last() 检索表头/表尾元素并删除。

ListTest01类(测试以上三个东西):

package LessonForList01;

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

class Game
{
	private String name;
	
	public Game(String name)
	{
		this.name = name;
	}
	
	@Override
	public String toString()
	{
		return this.name;
	}
}

public class ListTest01 
{

	public static void main(String[] args) 
	{
		List<String> l1 = new ArrayList<String>();
		//也可以ArrayList<String> al1 = new ArrayList<String>();我个人喜欢这样
		
		//向顺序表中添加元素
		l1.add("a");
		l1.add("c");
		l1.add("d");
		l1.add("f");
		l1.add("e");
		
		l1.add(0, "ZLM");
		l1.add(0, "HLW");
		System.out.println("顺序表l1的当前长度为:"+l1.size());
		
		//遍历顺序表l1
		
//		for (String s:l1)
//		{
//			System.out.println("顺序表中的元素有:"+s);
//		}
		
		Iterator<String> str1 = l1.iterator();
		while (str1.hasNext())
		{
			System.out.println("顺序表中的元素有:"+str1.next());
		}
		
		System.out.println("---------------------------------");
		
		//截取顺序表
		List<String> l2 = new ArrayList<String>(l1.subList(0, 2));
		System.out.println("顺序表l2的当前长度为:"+l2.size());
		System.out.println("被截取后的顺序表l1长为:"+l1.size());
		//可见该截取方法并不会影响原顺序表中的内容
		
		Iterator<String> str2 = l2.iterator();
		while(str2.hasNext())
		{
			System.out.println("l1被截取第0~1位上的元素作为l2的表的内容此时表中元素为:"+str2.next());
		}
		
		//str1中的指针指到最后了了所以得创建新的迭代器来遍历,我们也可以选择for循环或者for-each方法。
		Iterator<String> str3 = l1.iterator();
		while (str3.hasNext())
		{
			System.out.println("顺序表中的元素有:"+str3.next());
		}
		
		System.out.println("---------------------------------");
		
		//判断包含
		System.out.println("l2表中是否包含叫做ZLM的字符串:"+l2.contains("ZLM"));
		
		ArrayList<Game> a1 = new ArrayList<Game>();
		
		Game g1 = new Game("MHW");
		Game g2 = new Game("MHW");
		Game g3 = new Game("Rario");
		
		a1.add(g1);
		a1.add(g3);
		
		//这里调用的是Object类中的equals方法来比较的,比较地址。
		System.out.println("l2表中是否包含叫做ZLM的字符串:"+a1.contains(g2));
		
		//双向遍历
		ListIterator<Game> game1 = a1.listIterator();
		
		//顺序
		while (game1.hasNext())
		{
			System.out.println("a1中有啥元素:"+game1.next());
		}
		
		//倒序
		while (game1.hasPrevious())
		{
			System.out.println("a1中有啥元素:"+game1.previous());
		}
		
		System.out.println("-----------------------");//LinkedList测试
		
		LinkedList<String> lk1 = new LinkedList<String>(l1);
		
		lk1.forEach(System.out::println);
		
		lk1.addFirst("LTW");
		lk1.addLast("ZYH");
		lk1.forEach(System.out::println);//向表中添加元素并遍历
		
		System.out.println("lk1中的第一个元素:"+lk1.peekFirst());
		System.out.println("lk1中的最后一个元素:"+lk1.peekLast());
		
		System.out.println("移除lk1中的第一个元素名为:"+lk1.pollFirst());
		System.out.println("移除lk1中的最后一个元素名为:"+lk1.pollLast());
		lk1.forEach(System.out::println);//删除后再次遍历表
	}
}

本篇部分文字来源于:
咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
在这里十分感谢老师能够给我带来学习的激情。

2020.10.31
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值