集合知识点总结01



 

1集合框架体系

|--由来:数据多了可以用对象类存储,对象多了用集合来存。

|--理解::咱班就是一个集合,每个人都是单独封装了功能的对象,而且长度是不固定的,因为每天都有人请假,77人或者76人,所以这个集合的长度是可变的。

|--概述:集合是一个容器、存储对象、长度可变化。

|--什么时候使用容器:一旦数据多了就得先把数据存储起来再操作,这样效率更好

|--和数组的区别:

1数组定义时长度是固定的(必须明确元素类型和长度) 集合定义时,可以不用明确长度,长度是可变的。

2数组存储是同一类型的数据,集合存储的是对象,而对象可以是任意类型

3数组可以存储基本数据值,而集合只能对象。

|--集合框架构成与分类:

|--数据结构?什么是数据结构?有哪些体现方式?

|--每一个容器因为自身的数据机构不同,进行了单独的描述和对象的封装,以为这些对象有共性就进行向上抽取,形成了集合框架,

|--学习体系结构的技巧:查阅顶层内容、建立低层对象(继承体系中学)

 

2Collection接口的常见方法:

|--

Add();添加一个元素

AddAll();添加一个集合,把小集合添加到大集合中

|--

Remove();删除一个,删除会返回Boolean类型,用到equals方法判断是否相同。如果删除成功,会改变集合的长度,下面同理。

removeAll();删除一部分,按照指定的集合的元素来删

Clear();清空

|--判断

Contains();包含,先遍历对象的元素,用到了对象判断的equals方法

isEmpty();是否为空

Size();集合的元素的大小或者说长度

|--

retainAll();取交集

Iterator();取出元素

|--转变

toArray()

理解总结:把我们现在的班级想成容器即可,班上来一个新同学add()添加一个,来了一堆同学addAll();添加一部分班上出去一个remove()删除一个,出去一部分removeAll()删除一部分。班上是不是有人isEmpty();班上有多少人Size();班上人全部都出去clear()班上是否包含张三contains();和隔壁班有没有相同的学生retainAll();

|--实现代码:

public static void main(String[] args)

    {

        Collection coll=new ArrayList();

        methodDemo(coll);

    }

    public static void methodDemo(Collection coll)

    {  

            //添加:

            coll.add("abc1");

            coll.add("abc2");

            coll.add("abc3");

            coll.add("abc4");

            sop(coll);//输出集合中的元素,[abc1,abc2,abc3,abc4]其实在使用集合对象的toString()

            集合容器变成字符串:将集合中的对象元素变成字符串,用逗号隔开,用中括号括起。

            此种方式仅仅是为了演示集合和方法操作后的集合中的变化情况而已。

            //删除一个

            coll.remove("abc2");删除会返回boolean类型。

            用到equals方法判断是否相同。

            sop(coll.size());true size 3

            总结:删除如果成功,会改变集合的长度。

            //清空

            coll.clear();

           

            //判断元素是否存在

            boolean b=coll.contains("abc3");先遍历对象元素,用到了对象判断的equals方法。

            sop(b);true

            coll.isEmpty();判断是否为空。

           

            演示带All的方法 addAll\removeAll\containsAll\retainAll

            public static void methodAllDemo(Collection c1,Collection c2)

            {

                c1.add("abc1");

                c1.add("abc2");

                c1.add("abc3");

                c1.add("abc4");

                sop(c1);

                c2.add("abc1");

                c2.add("abc5");

                c2.add("abc6");

                sop(c2);

               

                c1.addAll(c2);会出现重复元素,把两个集合中所有的元素都添加到当中。

                boolean b=c1.containsAll(c2);c1中是否包含c集合中的元素、

                全部都有才算是包含,有一个没有都不行。

               

                boolean b=c1.removeAll(c2);c1c2中相同的元素在c1中删除。

                当没有相同的元素时,返回false.

               

                boolean b=c1.retianAll(c2);true 取出相同的部分。将c2c1相同的元素

                保存在c1中,不同的元素删除。

                注意:只要集合发生了变化就会返回真,不发生变化时返回false

                c1c2的一个子集的时候就会返回false(),因为c1没有发生变化。

        }

    }

   

    取出;

    interator();

    public static void getElements(Collection coll)

    {

        coll.add("abc1");

        coll.add("abc2");

        coll.add("abc3");

        coll.add("abc4");

       

        Iterator it=coll.iterator();

        while(it.hasNext())

        {

            sop(it.next());

            //sop(it.next());不能这样取。

        }

        迭代器取出对象元素的方式。next方法只能出现一次,避免问题的发生,没有这个元素异常。

        因为它只判断一次,但是取出两个元素的话。

        sop(it.hasNext());//为假,上面迭代器去完了之后就没用了。

       

        为了优化内存的另外一种写法:因为it对象使用之后并没有指向其他任何引用,任然保存在内存中。

        for(Iterator it=coll.iterator();it.hasNext();)

        {

            sop(it.next());

        }

        开发中常用!

        /*

        sop(it.next());

        sop(it.next());

        sop(it.next());

        sop(it.next());

        sop(it.next());//NoSuchElementException:没有这个元素异常。

        */这种做法不行,体现不出专业性,以及代码的复用性可言

    }

 

3迭代器的设计原理以及思想:

其实就Collection这种集合的公共取出方式,因为每一个具体的容器的数据结构不同,它们的取出方式也是不一样的,要根据每一个容器的特点来定义特定的取出方式,而取出方式直接在访问容器中的元素,所以将取出方式定义在容器内部,是一个内部类,而对外提供Iterator接口,这样可以通过该接口访问任意collection容器中的元素,所以它的出现降低了耦合性,我们只要面对Iterator接口,使用iterator接口即可。

4集合使用的细节:

1直接存储基本数据类型值也是可以的,因为JDK1.5后有自动装箱,会将基本数据类型转成对象,JDK1.4绝对不行。Eg:coll.add(3)

2集合对象中存储的其实是对象的元素的引用。

3Add的参数是Object类型,可以接收所有的类型的对象,会出现向上转型,取出元素时类型还是Object不能使用具体对象的特有内容,想要使用特有内容向下转型。Eg:Object obj="obj";想要取出访问子类的特有方法,向下转型,String s=(String)it.next();sop(s.length());

5collection框架体系:

Collection

|--list(列表):有序(存入的顺序和取出的顺序一致)因为该字体系中的元素有索引或者角标,所以是可以存储重复元素的。

|--list子体系中的特有方法:

1增加:void add(index,element)

2删除:Object removeindex

3查找

4修改:set(int index,element)返回值是当前被修改的对象

5实现代码:

Public static void main(String[] args)

{

List list=new ArrayList();

methodDemo();

}

Public static void methodDemo(List list)

{

List.add("abc1");

List.add("abc2");

List.add("abc3");

List.add("abc4");

Sop(list);

//添加:

List.add(1,"abc7");//[abc1,abc7,abc2,abc3]在角标1位置往后顺延。

//删除

Object obj=list.remove(2);//删除指定索引上的元素,根据角标删除会返回来被删对象

Sop(obj);//objabc2 [abc1,abc7,abc3]

//获取:获取指定角标上的元素并返回,这也是和remove的区别。

Object obj=list.get(1);

Sop(obj);//obj:abc1 [abc1,abc7,abc3]

//获取元素的索引,如果元素存在返回索引,不存在返回-1,依次还可以判断元素是否存在。

Int index=list.indexOf("abc1");

Sop(index);//index=1

//获取指定的子列表sublist(fromIndex,toindex)包含头不包含尾

List=list.sublist(1,2);//[abc1]

//修改:

Object obj=list.set(1,"haha");

Sop(obj);//[abc1,haha,abc3]

                    记住:只有list集合支持增删改查。

            }

}

6listIterator:

列表迭代器:想要在迭代的过程中进行元素的增加等动作,iterator就不行了,可以使用其子接口listaIterator,而且该接口的对象只有通过list集合的listIterator方法获取,是List集合特有的取出元素方式,它包含了增删改查的方法,而iterator只有hasNext()next()remove()方法

实现代码:

Public static void main(String[] args)

{

List list=new ArrayList();

List.add("abc1");

List.add("abc2");

List.add("abc3");

List.add("abc4");

ListIterator it=list.listIterator();

While(it.hasNext())
    {

Object obj=it.next();

If("abc2".equals(obj))

{

It.add("abc01");//添加元素

It.set("hehe");//修改元素

}

Else

{

Sop(obj);

}

}

}

Sop(it.hasNext());//false

iterator的区别:

实现代码:

Iterator it=list.iterator();//迭代器是集合的功能,知道集合中有多少元素。

While(it.hasNext())

{

Object obj=it.next();

//ConcurrentModificationException

多线程导致的,不能再同时遍历的时候进行删除,原因是迭代过程中,又使用集合对象对元素进行了操作导致了并发修改异常的发生,怎么去解决?迭代器的删除方式

If("abc2".equals(obj))

{

List.remove(obj);

It.remove();用迭代器的自身的方法。

}

Else
    {

Sop(obj);

}

}

|--set:还没有学到!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值