一、集合框架概述
·Java集合框架提供了一套优良性能、使用方便的接口和类,他们位于java.util包中
Collection:接口存储一组不唯一、无序的对象
(List):接口存储一组不唯一、有序(插入顺序)的对象,不固定长
(Set):接口存储一组唯一、无序的对象
Map:接口存储一组键值对象,提供key到value的映射key不重复且唯一、无序,value可以重复
二、为什么使用集合框架
如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象------可以使用java集合框架
三、List的实现类
- ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
- LinkedList采用链表存储方式,插入、删除元素时效率比较高
关于ArrayList
设计新闻管理系统
需求如下:
- 可以存储各类新闻标题
- 可以获取新闻标题的总数
- 可以逐条打印每条新闻标题的名称
首先创建新闻标题类:写出属性以及方法
//新闻标题类: id 新闻标题 创建者
public class NewsTitle {
private int id;
private String title;
private String name;
public NewsTitle(){
}
public NewsTitle(int id, String title, String name) {
super();
this.id = id;
this.title = title;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后对新闻标题通过ArrayList进行存储以及操作
import java.util.ArrayList;
//对新闻标题的存储及操作(ArrayList)
public class NewsMgr {
public static void main(String[] args) {
//创建新闻表示对象
NewsTitle t1 = new NewsTitle(1,"北京热门景点故宫","张三");
NewsTitle t2 = new NewsTitle(2,"北京热门景点长城","李四");
NewsTitle t3 = new NewsTitle(3,"北海","王五");
NewsTitle t4 = new NewsTitle(4,"颐和园","skh");
NewsTitle t5 = new NewsTitle(5,"天安门","klshf");
//创建集合对象,并且将新闻标题加入到集合中
ArrayList list =new ArrayList();
list.add(t1);
list.add(t2);
list.add(t3);
list.add(t4);
list.add(t5);
//获取新闻标题的总数
System.out.println("新闻标题一共有"+list.size()+"条");
//逐条打印新闻标题的名称
for (int i = 0; i < list.size(); i++) {
NewsTitle title =(NewsTitle) list.get(i);//等同于list[i],返回值为object
System.out.println(title.getTitle());
}
//方法二:增强型for
for (Object obj : list) {
NewsTitle title =(NewsTitle)obj;
System.out.println(title.getTitle());
}
}
}
ArrayList常用方法
依次在列表末尾顺序添加元素,其实索引位置从0开始---------> (boolean) 集合对象.add(标题对象);
在指定位置插入元素,索引位置必须介于0和列表中元素个数之间-------->集合对象.add(下标,对象);
返回列表中的元素个数--------->(int型)集合对象.size
返回指定索引位置处的元素,取出元素是object类型,使用前需要进行强制转换--------->对象集合.get();
判断列表中是否存在指定元素--------------------->(boolean类型)对象.contains();
从列表中删除元素--------------->对象集合.remove(对象);
从列表中删除指定位置元素,其实索引位置从0开始------------->对象集合.remove(下标);
Collection接口常用通用方法有:clear()、IsEmpty()、Iterator()、toArray()尝试请控制后打印长度以及是否为空
LinkedList集合类
- LinkedList类是List接口的一个具体实现类
- LinkedList类用于创建链表数据结构
- 插入或者删除元素时,它提供更好的性能
新闻管理系统,需求如下:
- 可以添加头条新闻标题
- 获取头条和最末条新闻标题
- 可以删除末条新闻标题
首先在新闻标题类创建属性与方法时是与上面的练习是一致的所以不再打一遍
其次在进行这一题的需求时,进行了一些LinkedList的独有方法。如下:
import java.util.LinkedList;
//对新闻标题的存储及操作(ArrayList)
public class NewsMgr {
public static void main(String[] args) {
//创建新闻表示对象
NewsTitle t1 = new NewsTitle(1,"北京热门景点故宫","张三");
NewsTitle t2 = new NewsTitle(2,"北京热门景点长城","李四");
NewsTitle t3 = new NewsTitle(3,"北海","王五");
NewsTitle t4 = new NewsTitle(4,"颐和园","skh");
NewsTitle t5 = new NewsTitle(5,"天安门","klshf");
//创建集合对象,并且将新闻标题加入到集合中
LinkedList list =new LinkedList();
list.add(t1);
list.add(t2);
list.add(t3);
list.add(t4);
list.add(t5);
//插入头条新闻
NewsTitle t6 = new NewsTitle(6,"总统府","kjsdf");
list.addFirst(t6);
//获取新闻标题的总数
System.out.println("新闻标题一共有"+list.size()+"条");
//逐条打印新闻标题的名称
System.out.println("***********************");
for (int i = 0; i < list.size(); i++) {
NewsTitle title =(NewsTitle) list.get(i);//等同于list[i],返回值为object
System.out.println(title.getTitle());
}
//方法二:增强型for
System.out.println("**********************");
for (Object obj : list) {
NewsTitle title =(NewsTitle)obj;
System.out.println(title.getTitle());
}
System.out.println("*************");
//获取头条和最末条新闻标题
NewsTitle t7 =(NewsTitle)list.getFirst();
System.out.println("头条新闻为"+t7.getTitle()+"-"+t7.getName());
NewsTitle t8 =(NewsTitle)list.getLast();
System.out.println("末条新闻为"+t8.getTitle()+"-"+t8.getName());
//删除最末条新闻标题
list.removeFirst();
list.removeLast();
System.out.println("*****************");
System.out.println("删除后的新闻标题有"+list.size()+"条");
for (Object obj : list) {
NewsTitle title =(NewsTitle)obj;
System.out.println(title.getTitle()+"-"+title.getName());
}
}
}
LinkedList独有方法
对象.addFirst()----------->在列表的首部添加元素
对象.addLast()------------>在列表的末尾添加元素
对象.getFirst ()------------->返回列表中的第一个元素
对象.getLast()--------------->返回列表中的最后一个元素
对象.removeFirst()---------->删除并返回列表中的第一个元素
对象.removeLast()----------->删除并返回列表中的最后一个元素
注意:父类引用指向子类对象的形式时如:List list = new LinkedList,这种写法只能调用父子类公用的方法,无法调用子类独有的方法 ,这一点在LinkedList的使用时尤为注意,因为LinkedList是有独有的子类方法的。