JAVA集合框架

集合框架概述

为什么使用集合框架
数组在处理一些问题时存在明显的缺陷,而集合完全弥补了数组的缺陷,它比数组更灵活更实用,可以大大提高软件的办事效率,并且不同的集合可适用于不同的场合。

Java集合框架包含的内容

Java集合框架为我们提供了一套性能优良,实用方便的接口和类,他们都位于java.util包中。
Java集合框架包含的主要内容及彼此之间的关系如图:

在这里插入图片描述

Java集合框架共有三大类接口:List,Set和Map
共同点:都是接口,都可以存储很多对象
区别如下
Collection:接口存储一组不唯一(允许重复),无序的对象。
Set接口继承Collection接口,存储一组唯一(不允许重复),无序的对象
List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来防止元素,不会重新排列)的对象。
Map接口存储一组成对的键—值对象,提供key(键)到value(值)的映射,Map中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
Iterator接口是负责定义访问和遍历元素的接口。

List接口

实现List接口的常用类有ArrayList和LinkedList,它们都可以容纳所有的类型和对象,包括null,允许重复,并且都保证元素的存储顺序。

ArrayList集合类
问题:使用集合存储多个狗狗信息,获取存储的狗狗的总数,如何按照存储顺序获取各个狗狗的信息并逐条输出相关内容?
代码如下:

public class Test1 {
    public static void main(String[] args) {
        // 1、创建四个狗狗对象
        Dog ououDog = new Dog("欧欧", "雪娜瑞");
        Dog yayaDog = new Dog("亚亚", "拉布拉多");
        Dog meimeiDog = new Dog("美美", "雪娜瑞");
        Dog feifeiDog = new Dog("菲菲", "拉布拉多");
        // 2、创建ArrayList集合对象并把四个狗狗对象放入其中
        	    List dogs = new ArrayList();
        	    dogs.add(ououDog);
        	    dogs.add(yayaDog);
        	    dogs.add(meimeiDog);
       		    dogs.add(2, feifeiDog); // 添加feifeiDog到指定位置
        // 3、输出集合中狗狗的数量
        System.out.println("共计有" + dogs.size() + "条狗狗。");
        // 4、通过遍历集合显示各条狗狗信息
        System.out.println("分别是:");
        for (int i = 0; i < dogs.size(); i++) {
                          Dog dog = (Dog) dogs.get(i);
            System.out.println(dog.getName() + "\t"     
                    + dog.getStrain());
        }
    }
}

运行结果在这里插入图片描述

ArraList接口中定义的各种常用方法:
在这里插入图片描述

LinkedList集合类
问题:如何在集合的头部和尾部添加,获取和删除狗狗对象呢?
代码如下:

/**
 * 测试LinkedList的多个特殊方法。
 */
public class Test3 {     
    public static void main(String[] args) {
        // 1、创建多个狗狗对象
        Dog ououDog = new Dog("欧欧", "雪娜瑞");
        Dog yayaDog = new Dog("亚亚", "拉布拉多");
        Dog meimeiDog = new Dog("美美", "雪娜瑞");
        Dog feifeiDog = new Dog("菲菲", "拉布拉多");
        // 2、创建LinkedList集合对象并把多个狗狗对象放入其中
        LinkedList dogs = new LinkedList();
        dogs.add(ououDog);
        dogs.add(yayaDog);
        dogs.addLast(meimeiDog);
        dogs.addFirst(feifeiDog);
        // 3、查看集合中第一条狗狗的昵称
        Dog dogFirst=(Dog)dogs.getFirst();
        System.out.println("第一条狗狗的昵称是"+dogFirst.getName()+"。" );
        // 4、查看集合中最后一条狗狗的昵称
        Dog dogLast=(Dog)dogs.getLast();
        System.out.println("最后一条狗狗的昵称是"+dogLast.getName()+"。" );
        // 5、删除集合中第一个狗狗和最后一个狗狗          
        dogs.removeFirst();
        dogs.removeLast();          
        // 6、显示删除部分狗狗后集合中各条狗狗信息
        System.out.println("\n删除部分狗狗后还有" + dogs.size() + "条狗狗。");
        System.out.println("分别是:");          
        for (int i = 0; i < dogs.size(); i++) {
            Dog dog = (Dog) dogs.get(i);
            System.out.println(dog.getName() + "\t" + dog.getStrain());
        }
    }
}

运行结果如下:在这里插入图片描述
LinkedList的一些特殊方法:
在这里插入图片描述

Map接口

HashMap集合类
问题:建立国中文家英文简称和中文全名之间的键—值关系,通过删除键实现对应值的删除,应该如何实现?

代码如下:

/**
 * 测试HashMap的多个方法。
 */
public class Test4 {
    public static void main(String[] args) {
        // 1、使用HashMap存储多组国家英文简称和中文全称的键值对
        Map countries = new HashMap();
	    countries.put("CN", "中华人民共和国");
	    countries.put("RU", "俄罗斯联邦");
	    countries.put("FR", "法兰西共和国");
	    countries.put("US", "美利坚合众国");
        // 2、显示"CN"对应国家的中文全称
        String country = (String) countries.get("CN");
        System.out.println("CN对应的国家是:" + country);
        // 3、显示集合中元素个数
        System.out.println("Map中共有"+countries.size()+"组数据");
        /*4、两次判断Map中是否存在"FR"键*/
        System.out.println("Map中包含FR的key吗?" + 
        countries.containsKey("FR"));
        countries.remove("FR");
        System.out.println("Map中包含FR的key吗?" + 
        countries.containsKey("FR"));
        /* 5、分别显示键集、值集和键值对集*/
        System.out.println(countries.keySet());
        System.out.println(countries.values());
        System.out.println(countries);
        /* 3、清空 HashMap并判断*/
        countries.clear();
        if(countries.isEmpty())
        	System.out.println("已清空Map中数据!");
    }
}

运行结果:
在这里插入图片描述
Map的常用方法:
在这里插入图片描述

迭代器Iterator

所有集合借口和类都没有提供相应的遍历方法,而是把遍历交给迭代器Iterator完成。Iterator为集合而生,专门实现集合的遍历。它隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口。

Collection接口的iterator()方法返回一盒iterator,然后通过iterator接口的两个方法即可方便地实现遍历:
1.boolean hasNext():判断是否存在另一个可访问的元素
2.Object next():返回要访问的下一个元素

泛型集合

泛型集合的应用
使用泛型集合在创建集合对象时指定集合中的元素的类型,从集合中取出元素时无需进行类型强制转换,并且如果把非指定类型对象放入集合,会出现编译错误。这是为了避免出现ClassCastException异常。

对List和ArrayList应用泛型
代码如下:


/**
 * 测试对List应用泛型。
 */
public class Test6 {
    public static void main(String[] args) {
        /* 1、创建多个狗狗对象*/
        Dog ououDog = new Dog("欧欧", "雪娜瑞");
		Dog yayaDog = new Dog("亚亚", "拉布拉多");
		Dog meimeiDog = new Dog("美美", "雪娜瑞");
		Dog feifeiDog = new Dog("菲菲", "拉布拉多");
        /* 2、创建ArrayList集合对象并把多个狗狗对象放入其中*/
        List<Dog> dogs = new ArrayList<Dog>();//标记元素类型
        dogs.add(ououDog);
	    dogs.add(yayaDog);
	    dogs.add(meimeiDog);
	    dogs.add(2, feifeiDog); // 添加feifeiDog到指定位置
	    //dogs.add("hello"); //出现编译错误,元素类型不是Dog。
        /* 3、 显示第三个元素的信息*/
        Dog dog3 = dogs.get(2); //无需类型强制转换
        System.out.println("第三个狗狗的信息如下:");
        System.out.println(dog3.getName() + "\t" + dog3.getStrain());
        /*4、使用foreach语句遍历dogs对象*/
		System.out.println("\n所有狗狗的信息如下:");
		for(Dog dog:dogs){//无需类型强制转换
			System.out.println(dog.getName() + "\t" + dog.getStrain());
		}   
    }
}

结果如下:
在这里插入图片描述

Java中共有八个包装类
Byte,Short,Intager,Long,Flost,Double,Boolean,Character.
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值