Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
Java集合框架包含的内容
Collection 接口存储一组 不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,提供key到value的映射
List接口的实现类
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式,插入、删除元素时效率比较高
ArrayList
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
ArrayList类是List接口的一个具体实现类
ArrayList对象实现了可变大小的数组
随机访问和遍历元素时,它提供更好的性能
public static void main(String[] args) {
NewsTitle nt1 = new NewsTitle(1001,"佩罗西死了","张氏新闻");
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(nt2);
al.add(nt3);
al.add(nt4);
al.add(nt2);
//可以通过集合对象调用方法实现对集合中元素的操作
//获取集合中的元素个数
int size =al.size();
System.out.println(size);
//获取集合中指定位置的元素
// Object obj1 = al.get(0);
// NewsTitle tit=(NewsTitle)obj1;
// System.out.println(tit);
for (int i = 0; i <al.size(); i++) {
Object obj1 = al.get(i);
NewsTitle tit=(NewsTitle)obj1;
System.out.println(tit);
}
System.out.println("---------");
for (Object object : al) {
NewsTitle ntw = (NewsTitle) object;
System.out.println(ntw);
}
System.out.println("--------------------");
//使用迭代器遍历集合
/*
* 集合对象调用iterator()方法将集合中的所有元素按照顺序取出来放入到迭代器容器里面
* 然后通过迭代器对象调用hasnext()方法判断迭代器中是否有元素,有元素就通过next()方法取出这个元素
* 判断一个就取出一个,判断一个就取出一个,所以可以使用循环来取出里面所有的元素
*/
Iterator it=al.iterator();
while(it.hasNext()){
Object obj1=it.next();
NewsTitle tit=(NewsTitle)obj1;
System.out.println(tit);
}
System.out.println("---------------------");
//将数据存贮到集合中的指定位置
al.add(1,nt5);
Iterator it1=al.iterator();
while(it1.hasNext()){
Object obj1=it1.next();
NewsTitle tit=(NewsTitle)obj1;
System.out.println(tit);
}
//删除集合中的元素
System.out.println("------------");
Object ob=al.remove(1);
al.remove(nt3);
for (int i = 0; i <al.size(); i++) {
Object obj1 = al.get(i);
NewsTitle tit=(NewsTitle)obj1;
System.out.println(tit);
}
System.out.println("---------");
//判断集合中是否含有指定元素
boolean result = al.contains(nt5);
System.out.println(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());
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开始
LinkedList
LinkedList采用链表存储方式,插入、删除元素时效率比较高
LinkedList类是List接口的一个具体实现类
LinkedList 类用于创建链表数据结构
插入或者删除元素时,它提供更好的性能
// 准备数据:创建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万给娃集奥特曼卡没集齐","合肥观察");
//准备容器:创建集合对象,创建LInklist对象
//List是一个接口,LinkedList是List接口的实现类,将List接口引用执行了实现类的实例
//向上转型:父类(接口)的引用指向子类的实例,父类引用无法调用子类特有的方法
List list = new LinkedList();
list.add(nt1);
list.add(nt3);
list.add(nt2);
System.out.println(list.size());
//使用迭代器将list集合进行遍历
Iterator it=list.iterator();
while(it.hasNext()){
Object obj = it.next();
NewsTitle nt = (NewsTitle)obj;
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接口常用的实现类
循环方式
增强for循环
Iterator关键字
唯一
public class HashSetDemo01 {
public static void main(String[] args) {
//准备容器
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());
}
}
无序
public static void main(String[] args) {
//准备容器
HashSet hs = new HashSet();
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万给娃集奥特曼卡没集齐","合肥观察");
NewsTitle nt6 = new NewsTitle(1004,"苏氏祖祠。苏炳添是苏东坡第29代孙","生活观察");
hs.add(nt1);
hs.add(nt3);
hs.add(nt5);
hs.add(nt2);
hs.add(nt4);
hs.add(nt6);
//获取集合中的元素个数
System.out.println(hs.size());
//获取集合中的元素
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);
}
}
LinkedList常用方法
void addFirst(Object o)
在列表的首部添加元素
void addLast(Object o)
在列表的末尾添加元素
Object getFirst()
返回列表中的第一个元素
Object getLast()
返回列表中的最后一个元素
Object removeFirst()
删除并返回列表中的第一个元素
Object removeLast()
删除并返回列表中的最后一个元素
Map
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
public static void main(String[] args) {
// 准备容器,创建HashMap对象
HashMap hm = new HashMap();
//准备元素并将元素存储到集合中
hm.put("CN", "中华人民共和国");
hm.put("JP", "小日子");
hm.put("RU", "俄罗斯联邦");
hm.put("US", "漂亮国");
//获取集合中元素个数
System.out.println(hm.size());
//根据键获取对应的值
Object obj = hm.get("CN");
String str1 = (String)obj;
System.out.println(str1);
System.out.println(hm.get("CNN"));
//删除集合中的元素
Object obj2 = hm.remove("JP");
String str2 = (String)obj2;
System.out.println(str2);
System.out.println(hm.size());
System.out.println("--------------");
//获取HashMap结合中所有键值对的键
Set keys=hm.keySet();
for (Object object : keys) {
String key = (String)object;
System.out.println(key);
}
//获取HashMap集合中所有键值对的值
Collection values=hm.values();
for (Object object : values) {
String value = (String)object;
System.out.println(value);
}
//查询集合中是否存在指定键对应的键值对
System.out.println(hm.containsKey("RU"));
System.out.println(hm.containsKey("JP"));
System.out.println("------------------");
//遍历键值对的三种方式
//方式一:获取键的集合,然后在遍历键的集合过程中调用get()方法获取值
Set keys2=hm.keySet();
for (Object object : keys2) {
String key = (String)object;
//根据键获取值
Object obj1=hm.get(key);
String value =(String)obj;
System.out.println(key+"--"+value);
}
System.out.println("***********************");
//方式二:获取键的集合,然后在遍历键的集合过程中调用get()方法获取值
Set keys3=hm.keySet();
Iterator it=keys3.iterator();
while(it.hasNext()){
Object object = it.next();
String key = (String)object;
//根据键获取值
Object obj1=hm.get(key);
String value =(String)obj;
System.out.println(key+"--"+value);
}
System.out.println("***********************");
//方式三:键值对遍历,将hm集合中的键值对整体取出来后放入到Set集合中
/*
* 使用entrySet()方法将hm集合中的键值对整体取出来放在Set集合中
* 然后使用增强for循环或者迭代器取出set集合中的键值对元素,取出来的是Object类型,实际上键值对的真正类型是MAP.Entry类型
* 所以将取出来的元素强制转换成Map.Entry类型,Map.Entry类中有getKey()方法,有getValue()方法获取键值对的值
*
*/
Set keyValues=hm.entrySet();
for (Object object : keyValues) {
Map.Entry me = (Map.Entry)object;
//获取键
Object object1 = me.getKey();
String key = (String)object1;
Object object2 = me.getKey();
String value = (String)object2;
System.out.println(key+"--"+value);
}
}