栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

集合类库的学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

集合类库的学习

概述
  • 当需要在Java程序中记录单个数据内容时,则声明一个变量。
  • 当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组。
  • 当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象。
  • 当需要在Java程序中记录多个类型相同的对象数据时,创建一个对象数组。
  • 当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合
框架结构
  • Java中集合框架顶层框架是:java.util.Collection集合 和 java.util.Map集合
  • Collection集合中存取元素的基本单位是:单个元素。
  • Map集合中存取元素的基本单位是:单对元素
Collection集合

java.util.Collection接口是List接口、Queue 接口以及Set接口的父接口,因此该接口里定义的方法既可用于操作List集合,也可用于操作Queue集合和Set集合
同时:接口是不能用来new对象的。即Collection c1 = new Collection()是不行的

public class CollectionTest {

    public static void main(String[] args) {
        //1.准备一个Collection集合并打印
        //接口类型的引用指向了实现类的对象,形成多态
        Collection c1 = new ArrayList();
        //自动调用ArrayList()类中的toString方法 默认打印格式为:[元素值1, 元素值2,...]
        System.out.println("集合中的元素有:"+c1);//啥也没有[]
        System.out.println("-----------------------");

        //2.向集合中添加单个元素并打印
        boolean b1 = c1.add(new String("one"));
        System.out.println("b1="+b1);//true
        System.out.println("集合中的元素有:"+c1);

        b1 = c1.add(Integer.valueOf(2));
        System.out.println("b1="+b1);//true
        System.out.println("集合中的元素有:"+c1);//[one,2]

        b1 = c1.add(new Person("张飞",30));
        System.out.println("b1="+b1);//true
        System.out.println("集合中的元素有"+c1);//[one,2,]

        //3.向集合中添加多个元素并打印
    }
}
    }
}

Person类内容如下

结果如下:

c1集合中最后一个元素就是Person类中的toString()方法
打印集合中的所有元素时,本质上就是打印集合中的每个对象,也就是让每个对象调用对应类的toString()方法
String()类和Integer()类中也有toString()方法的(Java官方重写过)

添加多个元素
//3.向集合中添加多个元素并打印
        Collection c2 = new ArrayList();
        c2.add("three");
        c2.add(4);//自动装箱机制
        System.out.println("c2="+c2);//[three,4]
        //将c2中的所有元素全部添加到c1中
        b1=c1.addAll(c2);
        System.out.println("b1="+b1);
        System.out.println("c1="+c1);//[one, 2, Person{name='张飞', age=30},three,4]


addAll就是将集合c2中的元素一个个一次添加到集合c1中

笔试考点
//笔试考点
        b1=c1.add(c2);
        System.out.println("b1="+b1);
        System.out.println("c1="+c1);

结果

把c2当作一个整体放进去,有中括号

Collection集合判断单个元素是否存在


注意这里contain的参数是Object类型的,意味着形参可以传任意形式的对象

//判断集合中是否包含参数指定的单个元素
        b1=c1.contains(new String("one"));
        System.out.println("b1="+b1);//true

        b1=c1.contains(new String("two"));
        System.out.println("b1="+b1);//false

        b1=c1.contains(Integer.valueOf(2));
        System.out.println("b1="+b1);//true

        b1=c1.contains(new Person("张飞",30));
        System.out.println("b1="+b1);//false


对于最后一段代码,明明c1集合中内容为[one, 2, Person{name=‘张飞’, age=30}, three, 4, [three, 4]],有对应元素,但b1=c1.contains(new Person("张飞",30));为false,是因为:

此处先插入 == 和 equals 的区别
  • 使用==进行比较的时候,比较的是他们在内存中的存放地址,所以只有同一个new出来的对象,他们的比较后的结果才会为true
  • Java中所有的类都是继承于Object,在Object中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址
  • 但在一些类库如String,Integer,Date在这些类当中这个方法被覆盖掉了,equals被重写了,不再是比较类在堆内存中的存放地址了。(如仅会比较内容,而不是地址)
  • 在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值
插入结果,承接上文
  • contains方法的工作原理是:Objects.equals(o,e),其中o代表contains方法的形式参数,e代表集合中的每个元素
  • 也就是说contains 拿着参数对象与集合中已有的元素依次进行比较,比较的方式调用Objects.equals
  • 而Person类中没有重写equals方法,则调用从Object类中继承下来的equals方法,比较两个对象的地址,所以为false
  • 在Person()中重写equals方法可解决这个问题
Collection判断所有元素是否存在

System.out.println("-----------------------");
        System.out.println("c1="+c1);
        //判断当前集合中是否包含参数指定集合的所有元素
        Collection c3 = new ArrayList();
        c3.add(4);
        System.out.println("c3="+c3);//[4]
        //判断c1中是否包含c3中所有元素
        b1=c1.containsAll(c3);
        System.out.println("b1="+b1);//true

        c3.add("five");
        System.out.println("c3="+c3);//[4,five]
        b1=c1.containsAll(c3);
        System.out.println("b1="+b1);//false

结果如下

Collection中containsAll的笔试考点
//笔试考点
        System.out.println("c1="+c1);
        System.out.println("c2="+c2);
        b1 = c1.containsAll(c2);//true
        System.out.println("b1="+b1);
        //判断集合c1中是否有集合c2这个整体为单位的元素
        b1 = c1.contains(c2);
        System.out.println("b1="+b1);

注意!

addAll是把元素一个个加进去,如果addAll了一个a集合,就不会再有以a集合整体为元素的值的,会返回false,上面是因为c1里有个

Collection集合实现交集的计算


这个方法的返回值取决于当前集合是否发生改变,如果此集合因此发生改变就返回true

System.out.println("-----------------------");
        //计算两个集合的交集并保留到当前集合中
        System.out.println("c2="+c2);//[three, 4]
        System.out.println("c3="+c3);//[4, five]
        b1 = c2.retainAll(c2);//当前集合中元素没有发生改变
        System.out.println("b1="+b1);
        System.out.println("c2="+c2);

        //计算集合c2和c3的交集并保留到c2中,取代集合c2中原有数值
        b1 = c2.retainAll(c3);
        System.out.println("b1="+b1);
        System.out.println("c2="+c2);
        System.out.println("c3="+c3);


返回值只看当前集合中元素是否有发生改变

Collection集合实现元素的删除
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号