[学习笔记] Java面向对象之集合框架

# 学习 # · 2020-06-30

集合框架概述

1、集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

(1)接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。

(2)实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构。

(3)算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

2、Java集合框架的类接口:

(1)Collection 接口:存储一组不唯一,无序的对象。

(2)Set接口:继承Collection接口,存储一组唯一,无序的对象。

(3)List 接口:存储一组不唯一,有序(插入顺序)的对象。

(4)Map接口:存储一组键值对象,提供key到value的映射。

(5)Iterator接口:负责定义访问和遍历元素的接口。


List接口

1、ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。

2、LinkedList采用链表存储方式。插入、删除元素时效率比较高。

3、ArrayList集合类:

/**
 * 测试ArryList的add()、size()、get()方法。
 */
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());
        }
    }
}
/**
 * 测试ArryList的remove()、contains()方法。
 */
public class Test2 {
    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);
        // 3、输出删除前集合中狗狗的数量
        System.out.println("删除之前共计有" + dogs.size() + "条狗狗。");
        // 4、删除集合中第一个狗狗和feifeiDog狗狗
        dogs.remove(0);
        dogs.remove(feifeiDog);
        // 5、显示删除后集合中各条狗狗信息
        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());
        }
        // 6、判断集合中是否包含指定狗狗信息
        if(dogs.contains(meimeiDog)){
            System.out.println("\n集合中包含美美的信息");
        } else {
            System.out.println("\n集合中不包含美美的信息");
        }
    }
}

4、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());
        }
    }
}

Map接口

1、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中数据!");
        }
    }
}

迭代器Iterator和增强for循环
/**
 * 测试通过Iterator和增强型for循环遍历Map集合
 */
public class Test5 {
    public static void main(String[] args) {
        /* 1、创建多个狗狗对象*/
        Dog ououDog = new Dog("欧欧", "雪娜瑞");
        Dog yayaDog = new Dog("亚亚", "拉布拉多");
        Dog meimeiDog = new Dog("美美", "雪娜瑞");
        Dog feifeiDog = new Dog("菲菲", "拉布拉多");
        /* 2、创建Map集合对象并把多个狗狗对象放入其中*/
        Map dogMap=new HashMap();
        dogMap.put(ououDog.getName(),ououDog);
        dogMap.put(yayaDog.getName(),yayaDog);
        dogMap.put(meimeiDog.getName(),meimeiDog);
        dogMap.put(feifeiDog.getName(),feifeiDog);
        /*3、通过迭代器依次输出集合中所有狗狗的信息*/
        System.out.println("使用Iterator遍历,所有狗狗的昵称和品种分别是:");
        Set keys=dogMap.keySet();//取出所有key的集合
        Iterator it=keys.iterator();//获取Iterator对象
        while(it.hasNext()){
            String key=(String)it.next();  //取出key
            Dog dog=(Dog)dogMap.get(key);  //根据key取出对应的值
            System.out.println(key+"\t"+dog.getStrain());
        }
        /*
        //使用foreach语句输出集合中所有狗狗的信息
        //for(元素类型t  元素变量x : 数组或集合对象){
        //    引用了x的java语句
        //}
         for(Object key:keys){
            Dog dog=(Dog)dogMap.get(key);  //根据key取出对应的值
            System.out.println(key+"\t"+dog.getStrain());
        }
        */
    }
}

泛型集合
/**
 * 测试对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());
        }
    }
}
/**
 * 测试对Map应用泛型。
 *
 */
public class Test7 {
    public static void main(String[] args) {
        /* 1、创建多个狗狗对象*/
        Dog ououDog = new Dog("欧欧", "雪娜瑞");
        Dog yayaDog = new Dog("亚亚", "拉布拉多");
        Dog meimeiDog = new Dog("美美", "雪娜瑞");
        Dog feifeiDog = new Dog("菲菲", "拉布拉多");
        /* 2、创建Map集合对象并把多个狗狗对象放入其中*/
        Map<String,Dog> dogMap=new HashMap<String,Dog>();
        dogMap.put(ououDog.getName(),ououDog);
        dogMap.put(yayaDog.getName(),yayaDog);
        dogMap.put(meimeiDog.getName(),meimeiDog);
        dogMap.put(feifeiDog.getName(),feifeiDog);
        /*3、通过迭代器依次输出集合中所有狗狗的信息*/
        System.out.println("使用Iterator遍历,所有狗狗的昵称和品种分别是:");
        Set<String> keys=dogMap.keySet();//取出所有key的集合
        Iterator<String> it=keys.iterator();//获取Iterator对象
        while(it.hasNext()){
            String key=it.next();  //取出key
            Dog dog=dogMap.get(key);  //根据key取出对应的值
            System.out.println(key+"\t"+dog.getStrain());
        }
        /*
        //使用foreach语句输出集合中所有狗狗的信息
        for(String key:keys){
            Dog dog=dogMap.get(key);  //根据key取出对应的值
            System.out.println(key+"\t"+dog.getStrain());
        }*/
    }
}
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/34/

评论