为什么使用集合框架
如果并不知道程序运行时会需要多少对象,或者需要 更复杂方式存储对象——可以使用Java集合框架
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
List接口
List接口的实现类
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式,插入、删除元素时效率比较高
ArrayList集合类
确定存储方式
ArrayList类是List接口的一个具体实现类
ArrayList对象实现了可变大小的数组
随机访问和遍历元素时,它提供更好的性能
确定存储对象
创建类型:新闻标题
包含属性: ID、名称、创建者
ArrayList常用方法
方法名 |
说明 |
boolean add(Object o) |
在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) |
在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() |
返回列表中的元素个数 |
Object get(int index) |
返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) |
判断列表中是否存在指定元素 |
boolean remove(Object o) |
从列表中删除元素 |
Object remove(int index) |
从列表中删除指定位置元素,起始索引位置从0开始 |
package demo01;
public class NewsTitle {
private int id;
private String name;
private String author;
public NewsTitle() {
super();
}
public NewsTitle(int id, String name, String author) {
super();
this.id = id;
this.name = name;
this.author = author;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "NewsTitle [id=" + id + ", name=" + name + ", author=" + author
+ "]";
}
}
package demo01;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo01 {
public static void main(String[] args) {
// 准备数据:创建5个NewsTitle类对象
NewsTitle nt1 = new NewsTitle(1001, "三亚新增本土480+774", "百度");
NewsTitle nt2 = new NewsTitle(1002, "中国成功发射一箭十六星", "中国航天");
NewsTitle nt3 = new NewsTitle(1003, "男子救落水5人后遇难 同伴讲述经过", "民间观察");
NewsTitle nt4 = new NewsTitle(1004, "苏氏祖祠:苏炳添是苏东坡第29代孙", "生活观察");
NewsTitle nt5 = new NewsTitle(1005, "家长花200万给娃集奥特曼卡没集齐", "合肥观察");
//准备容器:创建集合对象,创建ArrayList对象
ArrayList al = new ArrayList();
//将数据存储到集合中,向集合中添加元素不是通过元素下标赋值,而是通过集合对象调用方法实现
al.add(nt1);
al.add(nt3);
al.add(nt4);
al.add(nt2);
al.add(nt4);
//通过集合对象调用方法实现对集合元素的操作
//获取集合元素的个数
int size = al.size();
System.out.println("al集合中元素个数是:"+size);
//获取集合中指定位置的元素
// Object object0 = al.get(0);
// NewsTitle nwt0 = (NewsTitle) object0;
// System.out.println(nwt0);
//
// Object object1 = al.get(1);
// NewsTitle nwt1 = (NewsTitle) object1;
// System.out.println(nwt1);
//
// Object object2 = al.get(2);
// NewsTitle nwt2= (NewsTitle) object2;
// System.out.println(nwt2);
//
// Object object3 = al.get(3);
// NewsTitle nwt3 = (NewsTitle) object3;
// System.out.println(nwt3);
//
// Object object4 = al.get(4);
// NewsTitle nwt4 = (NewsTitle) object4;
// System.out.println(nwt4);
//遍历集合
for (int i = 0; i < al.size(); i++) {
Object object = al.get(i);
NewsTitle ntw = (NewsTitle)object;
System.out.println(ntw);
}
System.out.println("-------------------");
//增强for循环遍历集合
for (Object object : al) {
NewsTitle ntw = (NewsTitle)object;
System.out.println(ntw);
}
System.out.println("--------------");
//使用迭代器遍历集合
Iterator it=al.iterator();
while(it.hasNext()){
Object object = it.next();
NewsTitle ntw = (NewsTitle)object;
System.out.println(ntw);
}
System.out.println("----------------------");
//将数据存储到集合中的指定位置
al.add(1,nt5);
//增强for循环遍历集合
for (Object object : al) {
NewsTitle ntw = (NewsTitle)object;
System.out.println(ntw);
}
System.out.println("---------------------");
//删除集合中的某个元素
Object ob = al.remove(1);
al.remove(nt3);
for (Object object : al) {
NewsTitle ntw = (NewsTitle)object;
System.out.println(ntw);
}
//判断集合中是否包含指定的元素
boolean result =al.contains(nt1);
System.out.println("集合中包含nt3元素:"+result);
//判断集合是不是空的
System.out.println("集合是空的:"+al.isEmpty());
System.out.println("*************************");
//将集合转换成数组
Object[] objects =al.toArray();
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
System.out.println("********************");
//清空集合
al.clear();
System.out.println("集合是空的:"+al.isEmpty());
System.out.println(al.size());
}
}
使用迭代器遍历集合
获取Iterator :Collection 接口的iterator()方法
Iterator的方法
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
步骤:
集合对象调用iterator()方法将集合中的所有元素按照顺序取出来放入到迭代容器里面;
然后通过迭代器对象调用hasNext()方法判断迭代器中是否有元素,有元素就通过next()方法取出这个元素 ;
判断一个就取出一个,判断一个就取出一个,所以可以使用循环来去除里面所有的元素
LinkedList集合类
确定存储方式
LinkedList类是List接口的一个具体实现类
LinkedList 类用于创建链表数据结构
插入或者删除元素时,它提供更好的性能
LinkedList常用方法
方法名 |
说明 |
void addFirst(Object o) |
在列表的首部添加元素 |
void addLast(Object o) |
在列表的末尾添加元素 |
Object getFirst() |
返回列表中的第一个元素 |
Object getLast() |
返回列表中的最后一个元素 |
Object removeFirst() |
删除并返回列表中的第一个元素 |
Object removeLast() |
删除并返回列表中的最后一个元素 |
package demo01;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class LInkedListDemo01 {
public static void main(String[] args) {
// 准备数据:创建5个NewsTitle类对象
NewsTitle nt1 = new NewsTitle(1001, "三亚新增本土480+774", "百度");
NewsTitle nt2 = new NewsTitle(1002, "中国成功发射一箭十六星", "中国航天");
NewsTitle nt3 = new NewsTitle(1003, "男子救落水5人后遇难 同伴讲述经过", "民间观察");
NewsTitle nt4 = new NewsTitle(1004, "苏氏祖祠:苏炳添是苏东坡第29代孙", "生活观察");
NewsTitle nt5 = new NewsTitle(1005, "家长花200万给娃集奥特曼卡没集齐", "合肥观察");
//准备容器:创建集合对象,创建LinkedList对象
//list是一个接口,LinkedList是List接口的实现类,将List接口引用指向了实现类的实例
//向上转型:父类(接口)的引用指向子类的实例,父类引用无法调用子类特有的方法
List list = new LinkedList();
list.add(nt1);
list.add(nt3);
list.add(nt2);
list.add(nt2);
System.out.println(list.size());
//使用迭代器将list集合进行遍历
Iterator it = list.iterator();
while(it.hasNext()){
Object object =it.next();
NewsTitle nt = (NewsTitle)object;
System.out.println(nt);
}
System.out.println("---------------------------");
//向下转型:子类的引用指向父类的对象 需要进行向下转型的原因是
//父类引用无法调用子类中特有的方法,子类特有的方法只能通过子类对象调用
LinkedList link = (LinkedList) list;
link.addFirst(nt5);
link.addLast(nt4);
for (Object object : link) {
System.out.println(object);
}
System.out.println("-----------------------");
//获取集合中第一个元素和最后一个元素
System.out.println(link.getFirst());
System.out.println(link.getLast());
System.out.println("--------------------------");
//删除集合中的第一个元素和最后一个元素
link.removeFirst();
link.removeLast();
for (Object object : link) {
System.out.println(object);
}
}
}
Set接口
Set接口存储一组唯一,无序的对象 HashSet是Set接口常用的实现类 Set中存放对象的引用
HashSet是Set接口常用的实现类
案例
package demo02;
public class NewsTitle {
private int id;
private String name;
private String author;
public NewsTitle() {
super();
}
public NewsTitle(int id, String name, String author) {
super();
this.id = id;
this.name = name;
this.author = author;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "NewsTitle [id=" + id + ", name=" + name + ", author=" + author
+ "]";
}
}
package demo02;
import java.util.HashSet;
import java.util.Set;
public class HashSetDemo01 {
public static void main(String[] args) {
//准备容器:创建HashSet对象
Set set = new HashSet();
//准备数据
String s1 = new String("java");
String s2 =s1;
String s3 = new String("JAVA");
//将元素添加到集合中
set.add(s1);
set.add(s2);
set.add(s3);
//获取集合中的元素个数
System.out.println(set.size());//2
}
}
package demo02;
import java.util.HashSet;
import java.util.Set;
public class HashSetDemo02 {
//Set集合的元素特点:唯一、无序
public static void main(String[] args) {
//准备容器:创建HashSet对象
Set set = new HashSet();
//准备数据
String s1 =new String("java");
String s2 = s1;
String s3 =new String("java");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());//1
}
}
package demo02;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo03 {
public static void main(String[] args) {
//准备容器
HashSet hs = new HashSet();
// 准备数据:创建5个NewsTitle类对象
NewsTitle nt1 = new NewsTitle(1001, "三亚新增本土480+774", "百度");
NewsTitle nt2 = new NewsTitle(1002, "中国成功发射一箭十六星", "中国航天");
NewsTitle nt3 = new NewsTitle(1003, "男子救落水5人后遇难 同伴讲述经过", "民间观察");
NewsTitle nt4 = new NewsTitle(1004, "苏氏祖祠:苏炳添是苏东坡第29代孙", "生活观察");
NewsTitle nt5 = new NewsTitle(1005, "家长花200万给娃集奥特曼卡没集齐", "合肥观察");
//将数据存储到集合中
hs.add(nt1);
hs.add(nt3);
hs.add(nt5);
hs.add(nt2);
hs.add(nt4);
hs.add(nt4);
//获取集合中元素个数
System.out.println(hs.size());//5 set集合中的元素具有唯一性
//获取集合中的元素
for (Object object : hs) {
NewsTitle nt = (NewsTitle)object;
System.out.println(nt);
}
System.out.println("-------------------");
Iterator it = hs.iterator();
while(it.hasNext()){
Object object =it.next();
NewsTitle nt = (NewsTitle)object;
System.out.println(nt);
}
}
}