本博客地址 | GitHub | 更多资源免费下载
小伙伴们,大家晚上好!今天我给大家带来Java集合框架Collection之List讲解,今天主要讲解List接口下的两个实现类ArrayList和LinkedList,今天的讲解非常重要,请大家仔细看噢!
前面我们学过了数组(不熟悉数组的小伙伴点击:Java入门-Java学习路线课程第五课:一维数组),存取数据都非常方便,但是声明数组时要给一个固定的长度,如果用来储存每天的新闻的话,好象有点尴尬,因为新闻每天可能不一样的噢!如果新闻太少,浪费空间,如果新闻很多,又会造成空间不够,那么怎么办呢?还有怎么存储更复杂的数据(类型)对象,这些我们都可以用Java集合框架解决。
特征(单列集合): 不唯一,无序
特征(单列集合): 不唯一,有序
特征(单列集合): 唯一,无序
特征(双列集合): 键值对
key --->value map.put("userName",uName);
key是拿的Set的特性,而value是拿的Collection的特性。
特征:底层就是数组 查询、更新效率比较高
特征:底层就是链表 删除和增加效率比较高
News.java 实例类
package com.javaxyz.entity;
/**
* @ClassName:News.java
* @Description:新闻实例类
* @Author:DongGaoYun
* @AuthorEnglishName:Andy
* @URL:www.javaxyz.com 或 www.gyun.org
* @Email:[email protected]
* @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:[email protected]
* @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 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----");
}
}
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----
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:[email protected]
* @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 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----");
}
}
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----
初始化时,存储对象不同,分配空间方式也不一样,ArrayList是数组方式,而LinkedList是链表方式,如上图。
优势不一样,ArrayList适合查询和更新,而LinkedList更适合删除和增加。
更多免费资源请关注微信公众号: