为什么使用集合框架
如果并不知道程序运行时会需要多少对象,或者需要 更复杂方式存储对象——可以使用Java集合框架
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
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);
}
}
}