java进阶----集合

1、 集合弥补了数组的缺陷,它比数组更灵活实用,而且不同的集合适用于不同场合。

2、 Java集合框架共有3大类接口,即Map接口、List接口和Set接口。


3、 ArrayList和数组采用相同的存储方式,它的特点是长度可变且可以存储任何类型的数据,它的优点在于遍历元素和随机访问元素的效率较高。

4、 LinkedList类采用链表存储方式,优点在于插入、删除元素时效率较高。

5、 Iterator为集合而生,专门实现集合的遍历,它隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口。
 

6、 HashMap类是最常用的Map实现类,它的特点是存储键值对数据,优点是查询指定元素效率高。
 

7、 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,使代码可以应用于多种数据类型。
 

8、 使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行强制类型转换。
 

9、 在集合中使用泛型只是泛型多种应用的一种,在接口、类、方法等方面也有着泛型的广泛应用。
 

10、 如果数据类型不确定,可以通过泛型方法的方式,达到简化代码、提高代码重用性的目的。

4.1为什么使用集合框架

5 总结之前的储存数据的容器

package cn.bdqn.demo01;

public class Demo01 {

    public static void main(String[] args) {
        /*
         * 凡是能够用来存储数据的都可以看成是容器:
         * 
         * 变量:存储数据的空间(装数据的容器),一个变量中只能存储一个数据
         * 数组:存储数据的空间(装数据的容器),一个数组中可以存储多个相同类型的数据
         * 对象:可以理解成存储数据的空间(装数据的容器),一个对象可以拥有不同类型的属性,从而达到存储不同类型数据的目的
         * 集合:存储数据的空间(装数据的容器),一个集合中可以存储多个不同类型的数据
         * 计算机中的文件:将数据通过IO流存储到计算机的某个文件中
         * XML:从计算机的XML文件中读取数据或者存储数据到XML文件中
         * 数据库:专门用来存储和管理数据的软件
         * 
         */

    }

}
 

 5.1Java集合框架包含的内容2-2

 

 

5.2 学会查看API

 5.3 ArrayList集合类    === Set接口

        新闻管理系统,需求如下

                 可以存储各类新闻标题(包含ID、名称、创建者)

                 可以获取新闻标题的总数

                 可以逐条打印每条新闻标题的名称

     3.1新闻类:

package cn.bdqn.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
				+ "]";
	}

}

    3.2创建类对象

package cn.bdqn.demo02;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListDemo01 {

    public static void main(String[] args) {
        //创建3个NewsTitle类对象
        NewsTitle nt1 = new NewsTitle(1001, "以武力吞请入俄新动作", "前沿时刻");
        NewsTitle nt2 = new NewsTitle(1002, "没想到,“裁”这么快就来了", "表哥聊科技");
        NewsTitle nt3 = new NewsTitle(1003, "再过4天,要放7天假", "北大青鸟合肥一元教育");
        
        //数据准备好了,接下来要准备一个集合容器,使用ArrayList
        ArrayList al = new ArrayList();


 

//将数据存储到集合中,使用ArrayList类中的add()方法将数据存储到集合中
        al.add(nt1);
        al.add(nt2);
        al.add(nt3);
       ---------------> al.add(nt2);

 //将数据存储到集合中的指定位置:add(int index,Object obj)

        al.add(2, nt1)

 3.3 接下来对集合中元素的操作,都是通过集合对象名al调用方法来实现

//1)获取集合中的元素个数:size()

        int size =al.size();
        System.out.println("al集合中元素个数:"+size);

//2)获取集合中某个指定下标的元素:get(int index)
        //获取集合中的第一个元素
         Object obj1 =al.get(0);
        //System.out.println(obj1);-------------->输出为地址值
        NewsTitle nt = (NewsTitle)obj1;
        System.out.println(nt);

//3)遍历集合中的元素
        for(int i =0;i<al.size();i++){
            Object object=al.get(i);
            NewsTitle newsTitle = (NewsTitle)object;
            System.out.println(newsTitle);
        }

 //4)判断集合中是否包含某一个元素:contains()
        boolean result1 = al.contains(nt3);
        System.out.println("集合中包含nt3这个元素:"+result1);
        

 //5)删除集合中的元素:remove(元素名)/remove(元素下标)
        boolean result2 =al.remove(nt3);
        System.out.pri

        ntln("元素删除成功:"+result2);

3.4 list遍历的三种方法

//5)删除集合中的元素:remove(元素名)/remove(元素下标)
		boolean result2 =al.remove(nt3);
		System.out.println("元素删除成功:"+result2);
		
		System.out.println("****************************************");
		
		//删除后使用增强for循环遍历集合
		for(Object object:al){
			NewsTitle newsTitle = (NewsTitle)object;
			System.out.println(newsTitle);
		}
		
		System.out.println("****************************************");
		
		Object obj=al.remove(1);
		System.out.println(obj);
		
		System.out.println("****************************************");
		
		//删除元素后使用迭代器遍历集合:iterator()
		/*
		 * Iterator:迭代器,可以将它看成是集合容器
		 * 将集合al中得元素转移到了Iterator中
		 * 接下来使用hasNext()方法判断Iterator容器中是否有元素,如果有返回true,那么就调用next()方法取出集合中的元素
		 * 如果hasNext()方法返回false,说明Iterator容器中没哟元素

Iterator it =al.iterator();
   -------->     //从it容器中取出元素
        while(it.hasNext()){
            Object object =it.next();
            NewsTitle ntt = (NewsTitle)object;
            System.out.println(ntt);
        }
        
    --------->    //判断集合是否为空:isEmpty()
        boolean result3 =al.isEmpty();
        System.out.println("集合为空:"+result3);
        
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        
    -------------->    //将集合中的元素转换为数组:toArray()
        Object[] objs=al.toArray();
        for (int i = 0; i < objs.length; i++) {
            System.out.println(objs[i]);
        }
        
        ----------->//清空集合:clear()
        al.clear();
        System.out.println(al.size());
        System.out.println(al.isEmpty());
        
 

 LinkedList集合类2-1

public static void main(String[] args) {
        // 创建3个NewsTitle类对象
        NewsTitle nt1 = new NewsTitle(1001, "以-违!乌国四州申请入俄后,古作",
                "前沿时刻");
        NewsTitle nt2 = new NewsTitle(1002, "中芯国际“赌赢”了!也没想到,“制裁”这么快就来了",
                "表哥聊科技");
        NewsTitle nt3 = new NewsTitle(1003, "再过4天,要放7天假", "北大青鸟合肥一元教育");

        // 数据准备好了,接下来要准备一个集合容器,使用LinkedList
        List list = new LinkedList();
        
        //将数据存储到集合中
        list.add(nt1);
        list.add(nt2);
        list.add(nt3);
        
        //将nt3这个元素存储到集合的第一个位置
        //接口的引用无法调用实现类中特有的方法,需要进行向下转型
//        list.addFirst(nt3);
        LinkedList linkList = (LinkedList)list;
        linkList.addFirst(nt3);
        
        //遍历元素
        for (int i = 0; i < linkList.size(); i++) {
            Object obj1=linkList.get(i);
            NewsTitle ntt = (NewsTitle)obj1;
            System.out.println(ntt);
        }
        
        System.out.println("-------------------------");
        
        //获取集合中的第一个元素
        Object obj2=linkList.getFirst();
        NewsTitle ntt2 = (NewsTitle)obj2;
        System.out.println(ntt2);


        //获取集合中的最后一个元素
        Object obj3=linkList.getLast();
        NewsTitle ntt3 = (NewsTitle)obj3;
        System.out.println(ntt3);
        
        //删除集合中的第一个元素和最后一个元素
        System.out.println("删除的第一个元素是:"+linkList.removeFirst());
        System.out.println("删除的最后一个元素是:"+linkList.removeLast());
        
        System.out.println("集合为空:"+linkList.isEmpty());
        linkList.clear();
        System.out.println("集合为空:"+linkList.isEmpty());
    }

}

        Set接口存储一组唯一,无序的对象

         HashSet是Set接口常用的实现类

         Set中存放对象的引用

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())

6 接口 Map<K,V>

 用法:

6.1 public interface Map<K,V>
        将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

6.2  代码展示方法的用法

        Student类

package cn.bdqn.demo04;

public class Student {

	private String name;
	private int age;

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "name=" + name + ", age=" + age;
	}

}

6.2       Map方法

package cn.bdqn.demo04;

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

public class HashMapDemo02 {

	public static void main(String[] args) {

//创建3个Student类对象
        Student stu1 = new Student("张三", 18);
        Student stu2 = new Student("李四", 19);
        Student stu3 = new Student("如花", 20);

//创建集合容器
        Map map = new HashMap();
        
        //将学生对象和其英文名称存储到集合中
        map.put("JackMa", stu1);
        map.put("TomLei", stu2);
        map.put("MissDong", stu3);

7        遍历map集合  -----三种方式

    //遍历map集合
        //获取键的集合,然后通过键来找值
        Set keys=map.keySet();
        for(Object obj1:keys){
            String key = (String)obj1;
            Object obj2 =map.get(key);
            Student student1 = (Student)obj2;
            System.out.println(key+"对应的学生:"+student1);
        }

iterator*****

Iterator it = keys.iterator();
        while(it.hasNext()){
            Object obj3=it.next();
            String key2 = (String)obj3;
            Object obj4 =map.get(key2);
            Student student2 = (Student)obj4;
            System.out.println(key2+"对应的学生:"+student2);
        }
        

//map集合的第3种遍历方式
        Set keyValues=map.entrySet();
        for(Object obje:keyValues){
            Map.Entry me =(Map.Entry)obje;
            //获取键
            Object ob1 = me.getKey();
            String key = (String)ob1;
            //获取值
            Object ob2 =me.getValue();
            Student student = (Student)ob2;
            System.out.println(key+"对应的学生:"+student);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值