Java进阶-Java学习路线课程第一课:Java集合框架-ArrayList和LinkedList的使用

本博客地址 | GitHub | 更多资源免费下载

        小伙伴们,大家晚上好!今天我给大家带来Java集合框架Collection之List讲解,今天主要讲解List接口下的两个实现类ArrayList和LinkedList,今天的讲解非常重要,请大家仔细看噢!

Java集合框架-ArrayList和LinkedList的使用

       前面我们学过了数组(不熟悉数组的小伙伴点击:Java入门-Java学习路线课程第五课:一维数组),存取数据都非常方便,但是声明数组时要给一个固定的长度,如果用来储存每天的新闻的话,好象有点尴尬,因为新闻每天可能不一样的噢!如果新闻太少,浪费空间,如果新闻很多,又会造成空间不够,那么怎么办呢?还有怎么存储更复杂的数据(类型)对象,这些我们都可以用Java集合框架解决。

1、首先,让大家看看一个简洁的Java集合框架结构体系图:
2、再看看这些接口和类有什么特征。
  • Collection(接口)

特征(单列集合): 不唯一,无序

  • List(子接口)

特征(单列集合): 不唯一,有序

  • Set(子接口)

特征(单列集合): 唯一,无序

  • Map(接口)

特征(双列集合): 键值对

key --->value  map.put("userName",uName);
key是拿的Set的特性,而value是拿的Collection的特性。
  • ArrayList(List的实现类)

特征:底层就是数组 查询、更新效率比较高

  • LinkedList(List的实现类)

特征:底层就是链表 删除和增加效率比较高

3、ArrayList演示案例代码(含List遍历(或打印输出)五种方式):
News.java  实例类

package com.javaxyz.entity;

/**
 * @ClassName:News.java
 * @Description:新闻实例类
 * @Author:DongGaoYun
 * @AuthorEnglishName:Andy
 * @URL:www.javaxyz.com 或 www.gyun.org
 * @Email:DongGaoYun@qq.com
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @WeiXinGongZhongHao: JavaForum
 * @Date:2019-10-22 下午2:23:38
 * @Version:1.0 完成以下基本代码:  1.属性  2.get和set方法   3.构造方法  4.toString
 * 
 */
public class News {
	//属性
	private int id;
	private String title;//标题
	private String author;//作者

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the title
	 */
	public String getTitle() {
		return title;
	}

	/**
	 * @param title
	 *            the title to set
	 */
	public void setTitle(String title) {
		this.title = title;
	}

	/**
	 * @return the author
	 */
	public String getAuthor() {
		return author;
	}

	/**
	 * @param author
	 *            the author to set
	 */
	public void setAuthor(String author) {
		this.author = author;
	}

	// toString
	@Override
	public String toString() {
		return "News [id=" + id + "," + " title=" + title + "," + " author="
				+ author + "]\n";
	}

	/**
	 * 无参构造方法
	 */
	public News() {
	}

	/**
	 * 有参构造方法
	 * @param id
	 * @param title
	 * @param author
	 */
	public News(int id, String title, String author) {
		super();
		this.id = id;
		this.title = title;
		this.author = author;
	}

}
package com.javaxyz.test;

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

import com.javaxyz.entity.News;

/**
 * @ClassName:ArrayListDemo.java
 * @Description:ArrayList的使用
 * @Author:DongGaoYun 
 * @AuthorEnglishName:Andy
 * @URL:www.javaxyz.com 或   www.gyun.org
 * @Email:DongGaoYun@qq.com
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @WeiXinGongZhongHao: JavaForum
 * @Date:2019-10-22 下午2:38:25
 * @Version:1.0
 * ArrayList 底层数组 优势: 查询 更新
 */
public class ArrayListDemo{
	//需求:
	//增加新闻元素
	//获取新闻总数
	//操作ArrayList容器,移除元素   
	//打印输出五种方式	
 	@SuppressWarnings("all")
	public static void main(String[] args){
 		//创建对象
		List list=new ArrayList();//多态的形式。//1.父子关系 2.重写方法 3.父类的引用指向子类对象
//		ArrayList list=new ArrayList();
		News news1=new News(1, "张卓1", "green1");
		News news2=new News(2, "张卓2", "green2");
		News news3=new News(3, "张卓3", "green3");
		News news4=new News(4, "张卓4", "green4");
		News news5=new News(5, "张卓5", "green5");
		News news6=new News(6, "张卓6", "green6");
		News news7=new News(7, "张卓7", "green7");
		News news8=new News(8, "张卓8", "green8");
		News news9=new News(9, "张卓9", "green9");
		News news10=new News(10, "张卓10", "green10");
		News news11=new News(11, "张卓11", "green11");
		//插入数据
		//add方法在List集合里增加元素返回值是true
		list.add(news1);
		list.add(news2);
		list.add(news3);
		list.add(news5);
		list.add(news6);
		list.add(news9);
		list.add(news10);
		list.add(news11);
		//插入下标为1的位置,实际是第二个地方
		list.add(1,news4);
		list.add(2,news7);
		list.add(3,news8);
		//总条数
		System.out.println(list.size());
		
		//操作ArrayList容器,移除元素
	//	list.remove(1);
	//	list.remove(news1);
		//判断是否包含此元素
		System.out.println(list.contains(news7));
		//list
		System.out.println("-------第一种打印输出方法---start----");
		System.out.print(list);
		System.out.println("-------第一种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第二种打印输出方法-普通for--start----");
		for (int i = 0; i <list.size(); i++) {
			News newss= (News) list.get(i);
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第二种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第三种打印输出方法-增强for--start----");
		for (Object object : list) {
			News newss= (News) object;
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第三种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第四种打印输出方法-转换成数组--start----");
		/**
		 *  toArray
			Object[] toArray()
		 *  返回包含此 collection 中所有元素的数组。如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。 
			返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用者可以随意修改返回的数组。 
			
			此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。 		
			
			返回:
			包含此 collection 中所有元素的数组  更多免费资料请加微信公众号:javaforum
		 */
		Object[] obj=list.toArray();
		for (Object object : obj) {
			News newss= (News) object;
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第四种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第五种打印输出方法-迭代方式--start----");
		/**
		 * iterator
		   Iterator<E> iterator()
		   
		   boolean hasNext() 
		          如果仍有元素可以迭代,则返回 true。 
		          
		   E next()           更多免费资料请加微信公众号:javaforum
		          返回迭代的下一个元素。 
		          
		   void remove() 
		          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 

		 */
		Iterator it=list.iterator();
		while(it.hasNext()){
			News newss= (News) it.next();
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第五种打印输出方法---end----");		
 	} 
 }
4、输出结果:
11
true
-------第一种打印输出方法---start----
[News [id=1, title=张卓1, author=green1]
, News [id=4, title=张卓4, author=green4]
, News [id=7, title=张卓7, author=green7]
, News [id=8, title=张卓8, author=green8]
, News [id=2, title=张卓2, author=green2]
, News [id=3, title=张卓3, author=green3]
, News [id=5, title=张卓5, author=green5]
, News [id=6, title=张卓6, author=green6]
, News [id=9, title=张卓9, author=green9]
, News [id=10, title=张卓10, author=green10]
, News [id=11, title=张卓11, author=green11]
]-------第一种打印输出方法---end----

-------第二种打印输出方法-普通for--start----
News [id=1, title=张卓1, author=green1]
News [id=4, title=张卓4, author=green4]
News [id=7, title=张卓7, author=green7]
News [id=8, title=张卓8, author=green8]
News [id=2, title=张卓2, author=green2]
News [id=3, title=张卓3, author=green3]
News [id=5, title=张卓5, author=green5]
News [id=6, title=张卓6, author=green6]
News [id=9, title=张卓9, author=green9]
News [id=10, title=张卓10, author=green10]
News [id=11, title=张卓11, author=green11]
-------第二种打印输出方法---end----

-------第三种打印输出方法-增强for--start----
News [id=1, title=张卓1, author=green1]
News [id=4, title=张卓4, author=green4]
News [id=7, title=张卓7, author=green7]
News [id=8, title=张卓8, author=green8]
News [id=2, title=张卓2, author=green2]
News [id=3, title=张卓3, author=green3]
News [id=5, title=张卓5, author=green5]
News [id=6, title=张卓6, author=green6]
News [id=9, title=张卓9, author=green9]
News [id=10, title=张卓10, author=green10]
News [id=11, title=张卓11, author=green11]
-------第三种打印输出方法---end----

-------第四种打印输出方法-转换成数组--start----
News [id=1, title=张卓1, author=green1]
News [id=4, title=张卓4, author=green4]
News [id=7, title=张卓7, author=green7]
News [id=8, title=张卓8, author=green8]
News [id=2, title=张卓2, author=green2]
News [id=3, title=张卓3, author=green3]
News [id=5, title=张卓5, author=green5]
News [id=6, title=张卓6, author=green6]
News [id=9, title=张卓9, author=green9]
News [id=10, title=张卓10, author=green10]
News [id=11, title=张卓11, author=green11]
-------第四种打印输出方法---end----

-------第五种打印输出方法-迭代方式--start----
News [id=1, title=张卓1, author=green1]
News [id=4, title=张卓4, author=green4]
News [id=7, title=张卓7, author=green7]
News [id=8, title=张卓8, author=green8]
News [id=2, title=张卓2, author=green2]
News [id=3, title=张卓3, author=green3]
News [id=5, title=张卓5, author=green5]
News [id=6, title=张卓6, author=green6]
News [id=9, title=张卓9, author=green9]
News [id=10, title=张卓10, author=green10]
News [id=11, title=张卓11, author=green11]
-------第五种打印输出方法---end----
5、ArrayList初始化存储空间对象Object的长度为0,增加第一个元素时候,存储空间对象Object由0变成10个,10个存储空间用完之后增至15个如图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、LinkedList演示案例代码(含List遍历(或打印输出)五种方式):
package com.javaxyz.test;

import java.util.Iterator;
import java.util.LinkedList;

import com.javaxyz.entity.News;

/**
 * @ClassName:LinkedListDemo.java
 * @Description:LinkedList的使用
 * @Author:DongGaoYun 
 * @AuthorEnglishName:Andy
 * @URL:www.javaxyz.com 或   www.gyun.org
 * @Email:DongGaoYun@qq.com
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @WeiXinGongZhongHao: JavaForum
 * @Date:2019-10-22 下午2:38:25
 * @Version:1.0
 * LinkedList 底层链表 优势: 删除 增加    
 * 特有功能:
 * addFirst(); 增加头条元素
 * addLast(); 在新闻的最尾部插入新闻元素
 * getFirst(); 获取头条新闻
 * getLast(); 获取最尾部新闻
 * removeFirst();删除置顶元素
 * removeLast(); 删除最尾部新闻
 */
public class LinkedListDemo{
	//需求:
	//增加新闻元素
	//获取新闻总数
	//操作LinkedList容器,移除元素   
	//打印输出五种方式	
 	@SuppressWarnings("all")
	public static void main(String[] args){
 		//创建对象
 		//创建多态的形式,要注意的点:只能调用父类与子类重写的方法,子类特有方法无法调用
		//List list=new LinkedList();//多态的形式。//1.父子关系 2.重写方法 3.父类的引用指向子类对象
		
 		//初始化时只有first last      更多免费资料请加微信公众号:javaforum
 		
		LinkedList list=new LinkedList();
		News news1=new News(1, "张卓1", "green1");
		News news2=new News(2, "张卓2", "green2");
		News news3=new News(3, "张卓3", "green3");
		News news4=new News(4, "张卓4", "green4");
		News news5=new News(5, "张卓5", "green5");
		News news6=new News(6, "张卓6", "green6");
		News news7=new News(7, "张卓7", "green7");
		News news8=new News(8, "张卓8", "green8");
		//插入数据
		list.add(news1);
		list.add(news2);
/*		list.add(news3);*/
		//插入下标为1的位置,实际是第二个地方
		list.add(1,news4);
		//特有的方法:
		//置顶新闻
		list.addFirst(news8);
		//在新闻的最尾部插入新闻元素
		list.addLast(news5);
		//插入数据
		list.add(news6);
		//总条数
		System.out.println(list.size());
		//获取头条新闻
		System.out.println(list.getFirst());
		//获取最尾部新闻
		System.out.println(list.getLast());
		//操作ArrayList容器,移除元素
		list.remove(0);
		list.remove(news1);
		//删除置顶元素
		list.removeFirst();
		//删除最尾部新闻
		list.removeLast();
		//判断是否包含此元素
		System.out.println(list.contains(news7));
		//list
		System.out.println("-------第一种打印输出方法---start----");
		System.out.print(list);
		System.out.println("-------第一种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第二种打印输出方法-普通for--start----");
		for (int i = 0; i <list.size(); i++) {
			News newss= (News) list.get(i);
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第二种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第三种打印输出方法-增强for--start----");
		for (Object object : list) {
			News newss= (News) object;
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第三种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第四种打印输出方法-转换成数组--start----");
		/**
		 *  toArray
			Object[] toArray()
		 *  返回包含此 collection 中所有元素的数组。如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。  更多免费资料请加微信公众号:javaforum
			返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用者可以随意修改返回的数组。 
			
			此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。 		
			
			返回:
			包含此 collection 中所有元素的数组   
		 */
		Object[] obj=list.toArray();
		for (Object object : obj) {
			News newss= (News) object;
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第四种打印输出方法---end----");
		System.out.println();
		System.out.println("-------第五种打印输出方法-迭代方式--start----");
		/**
		 * iterator
		   Iterator<E> iterator()
		   
		   boolean hasNext() 
		          如果仍有元素可以迭代,则返回 true。 
		          
		   E next() 
		          返回迭代的下一个元素。 
		          
		   void remove() 
		          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 

		 */
		Iterator it=list.iterator();
		while(it.hasNext()){
			News newss= (News) it.next();
			System.out.println("News [id=" + newss.getId() + "," + " title=" + newss.getTitle() + "," + " author="
					+ newss.getAuthor() + "]");
		}
		System.out.println("-------第五种打印输出方法---end----");		
 	} 
 }
7、输出结果:
6
News [id=8, title=张卓8, author=green8]

News [id=6, title=张卓6, author=green6]

false
-------第一种打印输出方法---start----
[News [id=2, title=张卓2, author=green2]
, News [id=5, title=张卓5, author=green5]
]-------第一种打印输出方法---end----

-------第二种打印输出方法-普通for--start----
News [id=2, title=张卓2, author=green2]
News [id=5, title=张卓5, author=green5]
-------第二种打印输出方法---end----

-------第三种打印输出方法-增强for--start----
News [id=2, title=张卓2, author=green2]
News [id=5, title=张卓5, author=green5]
-------第三种打印输出方法---end----

-------第四种打印输出方法-转换成数组--start----
News [id=2, title=张卓2, author=green2]
News [id=5, title=张卓5, author=green5]
-------第四种打印输出方法---end----

-------第五种打印输出方法-迭代方式--start----
News [id=2, title=张卓2, author=green2]
News [id=5, title=张卓5, author=green5]
-------第五种打印输出方法---end----
8、LinkedList 初始化是first对象和 last对象都为 null ,增加元素后也是在first和 last之间增加。增加第一个元素后,又产生了三个item对象、next和prev对象。如图:

在这里插入图片描述
在这里插入图片描述

9、ArrayList和LinkedList的异同:
  • 初始化时,存储对象不同,分配空间方式也不一样,ArrayList是数组方式,而LinkedList是链表方式,如上图。

  • 优势不一样,ArrayList适合查询和更新,而LinkedList更适合删除和增加。

       小伙伴们,本章已经结束,你们都懂了吗?记得关注、点赞、分享和关注微信公众号(javaforum)噢!有疑问或好的建议请与我联系噢!持续更新!敬请关注!

———— 精 选 文 章 ————
  1. Java入门-Java学习路线课程第一课:初识JAVA
  2. Java入门-Java学习路线课程第二课:变量与数据类型
  3. Java入门-Java学习路线课程第三课:选择结构
  4. Java入门-Java学习路线课程第四课:循环结构
  5. Java入门-Java学习路线课程第五课:一维数组
  6. Java入门-Java学习路线课程第六课:二维数组
  7. Java入门-Java学习路线课程第七课:类和对象
  8. Java入门-Java学习路线课程第八课:方法和方法重载
  9. Java入门-Java学习路线扩展课程:equals的使用
  10. Java入门-Java学习路线课程面试篇:取商 / 和取余(模) % 符号的使用
  11. Java进阶-Java学习路线课程第二课:Java集合框架-HashSet的使用及去重原理
  12. Spring框架-Java学习路线课程第一课:Spring核心
  13. Spring框架-Java学习路线课程:Spring的扩展配置
  14. Springboot框架-Java学习路线课程:Springboot框架的搭建之maven的配置
  15. java学习:在给学生演示用Myeclipse10.7.1工具生成War时,意外报错:SECURITY: INTEGRITY CHECK ERROR
  16. 使用jquery发送Ajax请求的几种异步刷新方式
  17. idea Springboot启动时内嵌tomcat报错- An incompatible version [1.1.33] of the APR based Apache Tomcat Native
  18. 一个简单的SSM框架Demo(登录(包含拦截器)和注销

更多免费资源请关注微信公众号:

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页