Java高级特性 集合框架、泛型和Collection(一)(第二十三天)

集合的使用:

如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架

java集合框架:

在java中数据结构是以某种形式将数据组织在一起的集合。他们不仅存储数据,还支持访问以及处理数据的操作。这些数据结构通常称为java集合框架。

1、容器:一种能够存储其他数据或者元素的数据结构。

2、java集合框架支持的两种类型的容器:
      1)、一种是为了存储一个元素集合,简称为集合(collection)。
      2)、另一种是为了存储键/值对,称为图(map)。

1)准备数据:创建NewsTitle类对象
    NewsTitle nt1 = new NewsTitle(对象(即数据));

2)准备容器:创建集合对象,创建ArrayList对象
    ArrayList al = new ArrayList();//集合名:al

准备容器:创建集合对象,创建LinkedList对象
       List list = new LinkedList();

集合包含的内容

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
1)接口:Collection、Map
       Collection包含了List和Set两大分支。
2)具体类
3)算法

Collection提供了对集合进行排序、遍历等多种算法实现

1)List集合中元素的特点:
        不唯一(可重复)、有序
2)Set集合中元素的特点
        唯一(不可重复)、无序
3)Map集合中元素的特点
        键唯一、值不唯一

遍历集合的方法

遍历集合的方法有三种:
    1)List集合:普通for循环、增强for循环、迭代器
    2)Set集合:增强for循环、迭代器
    3)Map集合:增强for循环、迭代器、键值对遍历

ArrayList和LinkedList集合的区别

   ArrayList集合底层是长度可变的数组,遍历和查询集合中的元素效率高
   LinkedList集合底层是链表结构,删除和插入元素效率高

List接口

List三种遍历方法都可采用

确定存储方式
        ArrayList类是List接口的一个具体实现类
        ArrayList对象实现了可变大小的数组
        随机访问和遍历元素时,它提供更好的性能
确定存储对象
        创建类型:新闻标题
        包含属性: ID、名称、创建者
具体实现

代码:

package GatherDemo01;

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 GatherDemo01;

import java.util.ArrayList;

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 obj0=al.get(0);
		 NewsTitle nwt0 = (NewsTitle)obj0;
		 System.out.println(nwt0);
		
		 Object obj1=al.get(1);
		 NewsTitle nwt1 = (NewsTitle)obj1;
		 System.out.println(nwt1);
		
		 Object obj2=al.get(2);
		 NewsTitle nwt2 = (NewsTitle)obj2;
		 System.out.println(nwt2);
		
		 Object obj3=al.get(3);
		 NewsTitle nwt3 = (NewsTitle)obj3;
		 System.out.println(nwt3);
		
		 Object obj4=al.get(4);
		 NewsTitle nwt4 = (NewsTitle)obj4;
		 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()方法将集合中的所有元素按照顺序取出来放入到迭代器容器里面
		 * 然后通过迭代器对象调用hasNext()方法判断迭代器中是否有元素,有元素就通过next()方法取出这个元素
		 * 判断一个就取出一个,判断一个就取出一个,所以可以使用循环来取出里面所有的元素
		 */
	    /*Iterator it = al.iterator();
		while (it.hasNext()) {
			Object object = it.next();
			NewsTitle nt = (NewsTitle) object;
			System.out.println(nt);
		}*/

		System.out.println("--------------------");

		//将数据存储到集合中的指定位置
		al.add(1, nt5);//将元素nt5插入到下标为1的位置
		// 增强for循环遍历集合
		for (Object object : al) {
			NewsTitle ntw = (NewsTitle) object;
			System.out.println(ntw);
		}
		
		System.out.println("---------------------");
		
		//删除集合中的某个元素
//		Object ob=al.remove(1);//刪除下标为1的元素
		/*al.remove(nt3);
		for (Object object : al) {
			NewsTitle ntw = (NewsTitle) object;
			System.out.println(ntw);
		}*/
		
		//判断集合中是否包含指定的元素
		/*boolean result =al.contains(nt3);
		System.out.println("集合中包含nt3元素:"+result);*/
		
		//判断集合是不是空的
		/*System.out.println("集合是空的:"+al.isEmpty());*/
		
		//清空集合
		/*al.clear();
		System.out.println("集合是空的:"+al.isEmpty());
		System.out.println(al.size());*/
		
		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());*/
		
	}

}

对象 

package GatherDemo01;

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接口

1)Set接口存储一组唯一,无序的对象
2)HashSet是Set接口常用的实现类
        Set接口不存在get()方法
3)Set中存放对象的引用

判断加入对象是否已经存在:
采用对象的equals()方法比较两个对象是否相等

遍历Set集合:

方法1:通过迭代器Iterator实现遍历 
     1)获取Iterator :Collection 接口的iterator()方法
     2)Iterator的方法
           boolean hasNext(): 判断是否存在另一个可访问 
           的元素 
          Object next(): 返回要访问的下一个元素

方法2:增强型for循环

package GatherDemo03;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapDemo01 {

	public static void main(String[] args) {
		//准备容器:创建HashMap对象
		HashMap hm = new HashMap();
		
		//准备元素并将元素存储到集合中
		hm.put("CN", "中华人民共和国");
		hm.put("JP", "小日本");
		hm.put("RU", "俄罗斯联邦");
		hm.put("USA", "美利坚合众国");
		hm.put("UK", "大不列颠及北爱尔兰联合王国");
		System.out.println(hm.size());
		
		//根据键获取对应的值
		Object obj1=hm.get("CN");
		String str1=(String)obj1;
		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());//删除元素JP,还有4个元素
		
		//获取HashMep集合中所有键值对的键
		Set keys=hm.keySet();
		for (Object object : keys) {
			String key=(String)object;
			System.out.println(key);
		}
		
		//获取HashMep集合中所有键值对的值
		Collection values= hm.values();
		for (Object object : values) {
			String value=(String)object;
			System.out.println(value);
		}
		
		//查询集合中是否存在指定键对应的键值对
		System.out.println(hm.containsKey("RU"));//true
		System.out.println(hm.containsKey("JP"));//false
		
		
		//遍历键值对的3种方式
		//方式一:获取键的集合,然后在遍历键的集合过程中调用get()方法获取值
		Set keys2 = hm.keySet();
		for (Object object : keys2) {
			//获得键
			String key=(String)object;
			//根据键获取值
			Object obj=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 obj=hm.get(key);
			String value=(String)obj;
			System.out.println(key+"---"+value);
		}
		
		System.out.println("********************************");
		
		//方式三:键值对遍历,将hm集合中的键值对整体取出来后放入到Set集合中
		/*
		 *1)使用entrySet( )方法将hm集合中的键值对整体取出来放在Set集合中  
		 *
		 *2)然后使用增强for循环或者迭代器取出Set集合中的键值对元素,取出来的
		 *  是Object类型,实际,上键值对的真正类型是Map. Entry类型
		 *
		 *3)所以将取出来的元素强制转换为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.getValue();
			String value = (String)object2;
			System.out.println(key+"---"+value);
		}	
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值