JAVA集合概述
List接口,在jdk的API的说明文档查看:
在这里只是简单介绍ArrayList和LinkedList
ArrayList实现类在java.util.ArrayList
中,在API中查看基本信息
ArrayList的特点如下:
ArrayList是一个长度可变的数组
方便遍历元素和随机访问数组
ArrayList实现了长度可变的数组,在内存中分配连续的存储空间,遍历元素和随机访问元素的效率比较高
ArrayList是List接口的一个具体的实现类 ,实现类可变大小的数组,给随机访问和遍历元素提供更好的性能
接下来介绍一些ArrayLis创建和几个常用的方法,更多的方法可以在jdk的API文档中查看学习
写一个新闻管理系统,有如下的需求:
可以存储各类新闻标题(ID 名称 创建者)
可以获取新闻标题的总数
可以逐条打印每条新闻标题的名称
package cn.zhz.Kind; public class NewsTitle { private int id; private String title; private String author; public NewsTitle() { } public NewsTitle(int id, String title, String author) { super(); this.id = id; this.title = title; this.author = author; } public String getTitle() { return title; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public void setTitle(String title) { this.title = title; } }
package cn.zhz.Test; import java.util.ArrayList; import cn.zhz.Kind.NewsTitle; public class NewsMgr1 { public static void main(String[] args) { // 创建新闻标题对象 NewsTitle title1 = new NewsTitle(1, "北京热门景点故宫", "author"); NewsTitle title2 = new NewsTitle(2, "北京热门景点长城", "author"); NewsTitle title3 = new NewsTitle(3, "北京热门景点北海", "author"); NewsTitle title4 = new NewsTitle(4, "北京热门景点颐和园", "author"); NewsTitle title5 = new NewsTitle(5, "北京热门景点天安门", "author"); // 创建集合对象,将新闻标题加入到集合中 ArrayList list = new ArrayList(); // 依次添加在列表的末尾 list.add(title1); list.add(title2); list.add(title3); list.add(title4); // 在指定的位置中插入某个特定的元素 list.add(1, title5); // 获取新闻标题的总数 // ArrayList的size()方法等同于数组的length属性的作用 System.out.println("新闻标题一种有" + list.size() + "条记录"); System.out.println("************************************"); // 逐条打印新闻标题的名称 // 方法一:遍历ArrayList元素的位置(下标) for (int i = 0; i < list.size(); i++) { NewsTitle title = (NewsTitle) list.get(i);// 等同于list[i],返回的是Object System.out.println(title.getTitle()); } System.out.println("************************************"); // 方法二:增强型的for循环 for (Object obj : list) { NewsTitle title = (NewsTitle) obj; System.out.println(title.getTitle()); } // 判断列表中是否包含某个元素 System.out.println(list.contains(title1)); // 删除指定位置的列表元素 // list.remove(0); // 删除指定的元素 list.remove(title1); System.out.println(list.contains(title1)); System.out.println("************************"); System.out.println(list.size()); // 清空集合 list.clear(); System.out.println(list.size()); // 判断一个集合是否为空 System.out.println(list.isEmpty()); } }
可以自己尝试插入一个断点进行调试一下,体会一下:
认识了上面的ArrayList,List家族中还有一个LinkedList,也就是链表的意思。
LinkedList采用链表存储方式,这样让插入和删除元素的效率比较高
LinkedList类是一个List接口的具体实现类,用来创建链表数据结构,插入和删除元素时,可以提高更好的性能
查看LinkedList的基本信息
和上面的ArrayList一样,接下来介绍LinkedList的创建和几个常用的方法:
还是上面的存储新闻的栗子,但是和上一个不同的是:
可以添加头条新闻标题
获取头条和最末条的新闻标题
可以删除末条的新闻标题
package cn.zhz.Test; import cn.zhz.Kind.NewsTitle; import java.util.LinkedList; public class NewsMgr2 { public static void main(String[] args) { // 创建新闻标题对象 NewsTitle title1 = new NewsTitle(1, "北京热门景点故宫", "author"); NewsTitle title2 = new NewsTitle(2, "北京热门景点长城", "author"); NewsTitle title3 = new NewsTitle(3, "北京热门景点北海", "author"); NewsTitle title4 = new NewsTitle(4, "北京热门景点颐和园", "author"); NewsTitle title5 = new NewsTitle(5, "北京热门景点天安门", "author"); LinkedList list = new LinkedList(); list.add(title1); list.add(title2); list.add(title3); list.add(title4); list.add(1,title5); NewsTitle title6 = new NewsTitle(6,"北京首都博物馆","author"); list.addFirst(title6); // 获取新闻标题的总数 // ArrayList的size()方法等同于数组的length属性的作用 System.out.println("新闻标题一种有" + list.size() + "条记录"); System.out.println("************************************"); // 逐条打印新闻标题的名称 // 方法一:遍历ArrayList元素的位置(下标) for (int i = 0; i < list.size(); i++) { NewsTitle title = (NewsTitle) list.get(i);// 等同于list[i],返回的是Object,强制数据类型转换 System.out.println(title.getTitle()); } System.out.println("************************************"); // 方法二:增强型的for循环 for (Object obj : list) { NewsTitle title = (NewsTitle) obj; System.out.println(title.getTitle()); } // 判断列表中是否包含某个元素 System.out.println(list.contains(title1)); // 删除指定位置的列表元素 // list.remove(0); // 删除指定的元素 list.remove(title1); System.out.println(list.contains(title1)); System.out.println("************************"); System.out.println(list.size()); // 清空集合 // list.clear(); System.out.println(list.size()); // 判断一个集合是否为空 System.out.println(list.isEmpty()); //获取头条和末条的新闻标题 System.out.println("***************************"); NewsTitle titleFirst = (NewsTitle) list.getFirst(); System.out.println("头条新闻信息:"+ titleFirst.getTitle()+ titleFirst.getAuthor()); NewsTitle titleLast = (NewsTitle) list.getLast(); System.out.println("最末新闻信息"+ titleLast.getTitle()+ titleLast.getAuthor()); list.removeLast(); System.out.println("删除后的新闻标题总共有:"+ list.size()+ "条"); for (Object obj : list) { NewsTitle title = (NewsTitle) obj; System.out.println(title.getTitle()); } } }
自己可以插入断点进行调试一下。
从上面的ArrayList和LinkedList,可以看出他们都有什么异同呢?
同样是List实现类 元素有序 不唯一 长度可变
都有Collection和List的通用方法
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式,插入和删除的效率比较高