集合框架和泛型(一)

本课目标

掌握Java集合框架包含的内容

掌握  ArrayList   和  LinkedList  的使用

掌握   HashSet  的使用

掌握增强型 for 循环的用法

  • 在某些问题上数组存储对象数据时存在一些明显的缺陷:

1. 数组长度固定不变,不能很好地适应元素数量动态变化的情况。

2.通过数组名.length获取数组的长度,却无法直接获取数组中实际存储的元素个数

3.数组采用在内存中分配连续空间的方式存储,根据元素信息查找时效率比较低,需要多次比较。 

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

一、Java集合框架包含的内容

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于  iava.util 包中

二、Collection 接口

  • Collection  接口存储一组不唯一,无序的对象
  • List 接口继承  Collection 接口,存储一组不唯一,有序(插入顺序)的对象
  • Set  接口存储一组唯一,无序对象

三、List  接口

  • ArrayList  实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
  • LinkedList  采用链表存储方式。插入、删除元素时效率比较高

ArrayList  和  LinkedList 的区别

ArrayList  :基于动态数组的数据结构,地址连续,查询效率高

LinkedList :基于链表的数据结构,地址无序,新增删除效率高

1.List 接口 常用的方法
方法名说明

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开始

练习1:使用ArrayList存储企鹅信息

public class Pengin {
    private String name;
    private String sex;

    public Pengin() {
    }

    public Pengin(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }
    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    
    public static void showList(List<Pengin> penginList) {
       for(int i = 0;i < penginList.size();i ++){
           Pengin pengin = (Pengin) penginList.get(i);
           System.out.println(pengin.getName() + "\t" + pengin.getSex());
       }
    }
}
public class Test {
    public static void main(String[] args) {
        Pengin pengin1 = new Pengin("欧欧","Q仔");
        Pengin pengin2 = new Pengin("亚亚","Q妹");
        Pengin pengin3 = new Pengin("菲菲","Q妹");
        Pengin pengin4 = new Pengin("美美","Q妹");
        List<Pengin> penginList = new ArrayList<>();
        penginList.add(pengin1);
        penginList.add(pengin2);
        penginList.add(pengin3);
        penginList.add(pengin4);
        System.out.println("共计有" + penginList.size() + "只企鹅");
        System.out.println("分别是:");
        Pengin.showList(penginList);
        System.out.println("***************************");
        penginList.remove(pengin3);
        penginList.remove(pengin4);
        System.out.println("删除以后还剩" + penginList.size() + "只企鹅");
        System.out.println("分别是:");
        Pengin.showList(penginList);
        System.out.println("*************************");
        System.out.println("集合中是否包含美美的信息:" + penginList.contains(pengin4) );;
    }
}
2.LinkedList  集合类

LinkedList 的特殊方法

练习2:使用LinkedList存储新闻信息

public class News {
    private String article;

    public News() {
    }

    public News(String article) {
        this.article = article;
    }

    public String getArticle() {
        return article;
    }

    public void setArticle(String article) {
        this.article = article;
    }
    public static void show(List<News> newsList){
        for (News news : newsList) {
            System.out.println(news.getArticle() + "\t");
        }
    }
}
public class NewsMain {
    public static void main(String[] args) {
        News news1 = new News("看看上海怎样垃圾分类");
        News news2 = new News("华为麒麟最强芯片980问世");
        News news3 = new News("美国一意孤行要对中国加征关税");
        News news4 = new News("2019河南本科一批平行志愿正式开档");
        News news5 = new News("日本富士山于20日凌晨一点爆发");
        LinkedList<News> newsList = new LinkedList<>();
        newsList.add(news1);
        newsList.add(news4);
        newsList.add(news5);
        News.show(newsList);
        System.out.println("**************************************");
        newsList.addFirst(news2);
        newsList.addFirst(news3);
        System.out.println("头条和末条新闻已添加!\n");
        System.out.println("头条新闻的标题为:" + news2.getArticle());
        System.out.println("排在最后的新闻标题为:" + news3.getArticle());
        System.out.println("*****************************************");
        newsList.removeFirst();
        newsList.removeLast();
        System.out.println("删除的头条新闻标题为:" + news2.getArticle());
        System.out.println("删除的末条新闻标题为:" + news3.getArticle());
        System.out.println("删除后剩余的新闻标题条数:" + newsList.size());
        System.out.println("*****************************************");
        System.out.println("遍历所有新闻标题:");
        System.out.println("新闻标题名称:" + news1.getArticle());
        System.out.println("新闻标题名称:" + news4.getArticle());
        System.out.println("新闻标题名称:" + news5.getArticle());
    }
}

四、Set 接口

  • Set 接口存储一组唯一,无序的对象
  • Set 接口常用的实现类:HashSet
  • HashSet 集合的特点:

              1.集合内的元素是无序排列且不允许重复

               2.HashSet  集合的查找效率高

               3.允许集合元素值为null    

1.Set 接口常用方法

  在  HashSet  中使用  增强型for循环  : 迭代器Iterator  实现遍历  Set 集合

练习3:使用HashSet存储新闻信息

public class Title {
    private String news;

    public Title(String news) {
        this.news = news;
    }

    public String getNews() {
        return news;
    }

    public void setNews(String news) {
        this.news = news;
    }
    public static void show(Set<Title> titleSet){
        for(Title news : titleSet){
            System.out.println(news.getNews());
        }
    }
}

public class TitleMain {
    public static void main(String[] args) {
        Title title1 = new Title("看看上海怎样垃圾分类");
        Title title2 = new Title("华为麒麟最强芯片980问世");
        Title title3 = new Title("美国一意孤行要对中国加征关税");
        Title title4 = new Title("2019河南本科一批平行志愿正式开档");
        Title title5 = new Title("日本富士山于20日凌晨一点爆发");
        HashSet<Title> titleSet = new HashSet<>();
        titleSet.add(title1);
        titleSet.add(title2);
        titleSet.add(title3);
        titleSet.add(title4);
        titleSet.add(title5);
        Title.show(titleSet);
        System.out.println("**********************");
        System.out.println("新闻标题数目为:" + titleSet.size() + "条");
        System.out.println("芯片新闻是否存在:" + titleSet.contains(title2) );
        titleSet.remove(title2);
        System.out.println("芯片对象已删除");
        System.out.println("集合是否为空:" + titleSet.isEmpty());
        System.out.println();
        System.out.println("遍历所有新闻标题");
        Title.show(titleSet);
        System.out.println("**********************");
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值