集合框架一

集合框架一

学习Collection类的时候先看一下API怎么解释的:

Collection类:


public interface Collection<E>extends Iterable<E>


Collection层次结构中的根接口。

下面我们要学习的两个子接口:List<E>  Set<E>


–Collection


-List


-ArrayList


-LinkedList


-Set


-HashSet


-TreeSet

Map类:


public interface Map<k,v>;


将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值

要学习的实现类:


HashMap   LinkedHashMap   TreeMap




Collection 接口,针对的集合是单层集合

而Map<k,v>接口是以键值对出现的。我个人称为多层集合

第一步:学习Collection类:《父接口》

一:Collection类的概述:

Collection类:

位于:java.util包下,所以在使用的时候结的导入这个包。

public interface Collection<E>extends Iterable<E>,是根接口。


Collection类表示一组对象,这些对象也称为Collection的元素。


一些 collection 允许有重复的元素,而另一些则不允许。


一些 collection 是有序的,而另一些则是无序的




注意:哪些集合类可以重复?哪些集合类不能重复?


List集合可以重复——Set集合不能重复


 哪些集合类表示有序?哪些集合类不表示有序了?


List集合有序——-Set集合无序





说明:有序表示谁先存储,谁先出来

Collection是从1.2版本开始使用的

二、集合和数组的区别:


1.长度的区别:


A:数组的长度是固定的


B:集合的长度是可变的


2.存储的内容不一样,


A:数组存储的是同一种数据类型的元素


B:集合可以存储不同的类型的元素


3.存储的数据类型不一样:


A:数组可以存储基本数据类型,也可以存储引用数据类型


B:集合只能存储引用数据类型

关键代码:


Collection c = new ArrayList();


c.add(1);//自动转换成Integer类,调用的valueOf()方法


c.add(2);


c.add(3);


c.add(‘a’);


c.add(“a”);//自动转换成包装类 调用的valueOf()方法


c.add(false);


System.out.println(“c:”+c);








—————————-

源码:


Collection c = new ArrayList();


c.add(Integer.valueOf(1));


c.add(Integer.valueOf(2));


c.add(Integer.valueOf(3));


c.add(Character.valueOf(‘a’));


c.add(“a”);


c.add(Boolean.valueOf(false));


System.out.println(“c:” + c);

补充:在分析问题的时候:


从具体到抽象


在实现代码的时候:


从抽象到具体


在使用的时候:


使用具体

三、Collection接口的成员方法:


1.添加方法:


boolean add(Object obj):添加一个元素;


boolean addAlll(Collection c);添加一个集合元素;谁调用就往哪个里面添加所有


2.删除功能:


void clear();移除所有的元素


boolean remove(Object o);移除一个元素


boolean removeAll(Collection c)移除一个集合的元素《只要移除了一个元素,都返回true》


3判断功能:


boolean contains(Object o):判断集合中是否包含指定的元素


boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(包含了所有元素才返回true)


boolean isEmpty();是否为空


4.长度:


集合的长度是通过:int size()方法


而数组是通过length属性来获取数组的长度的


字符串中有length方法。


5.把集合转换成数组:


Object[] toArray();


6.交集功能:


boolean retainAll(Collection c);两个集合是否有交集


思考:


思考元素去哪了,返回的boolean又是什么意思呢?


如果有两个集合A和B


A对B做交集,最终的结果保存在A中,


返回值表示的是A是否发生过改变


7.集合框架的节点:Iterator


Collection<String> c = new ArrayList<String>();


c.add(“hello”);


c.add(“world”);


c.add(“java”);


c.add(“kevin”);


c.add(“cidy”);





Iterator<String> it = c.iterator();


while(it.hasNext()){//判断是否存在下一个元素


String s = it.next();


System.out.println(s):


}

案例:用集合存储5个学生对象,并把学生对象进行遍历:


/*

 * 学生类:

 */

public class Student {


//姓名


private String name;


//年龄:


private int age;


public Student() {


super();


// TODO Auto-generated constructor stub


}


public Student(String name, int age) {


super();


this.name = name;


this.age = age;


}


public String getName() {


return name;


}


public void setName(String name) {


this.name = name;


}


public int getAge() {


return age;


}


public void setAge(int age) {


this.age = age;


}


//重写了toString()方法


@Override


public String toString() {


return name+”—–“+age;


}


}


import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

/*

 * 用集合存储5个学生对象,并把学生对象进行遍历

 */

public class CollectionTest {


public static void main(String[] args) {


Collection<Student> c = new ArrayList<Student>();


Student s1 = new Student(“tom”, 24);


Student s2 = new Student(“kevin”, 28);


Student s3 = new Student(“cidy”, 22);


Student s4 = new Student(“Jon”, 24);


Student s5 = new Student(“Dive”, 29);


c.add(s1);


c.add(s2);


c.add(s5);


c.add(s4);


c.add(s3);


Object[] arr = c.toArray();


for (int i = 0; i < arr.length; i++) {


// 如果不重写toString()方法,打印的是地址值,在Studnet类中重写toString方法


System.out.println(arr[i]);


}


System.out.println(“———————-“);


// 转换成数组后可以使用增强for


for (Object o : arr) {


System.out.println(o);


System.out.println(“————————–“);


Iterator<Student> it = c.iterator();


while (it.hasNext()) {


Student s = it.next();


System.out.println(s.getName() + “—” + s.getAge());


//java.util.NoSuchElementException


//不要多次调用it.next();汇报上面的错误的


//System.out.println(it.next().getName()+”—“+it.next().getAge());





}


}


}

}

思考:迭代器为什么定义成一个接口,而不是类了?


假如把迭代器定义一个类,那么都可以创建对象,通过对象调用方法


从而来遍历集合,但是在java中有有多种不同的集合,每一种集合的数据结构不一样,


存储数据和遍历方式应该不一样,所以把迭代器定义为一个接口。




无论你是哪种集合的遍历,都应该具备判断和获取功能,每种集合遍历的方式不一样,

我们把具有相同功能抽取出来,并不提供具体的实现。

那么正直的实现,应该在子类中,以内部类的方式体现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100813.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • axon-saga

    axon-saga管理复杂的业务事务并不是每个命令都能够在单个ACID事务中完全执行。银行转帐是一个很常见的例子,常常作为他们的论据。人们经常认为,将资金从一个账户转移到另一个账户的交易绝对需要原子性和一致性。其实呢,不是的这样的。相反,这是不可能的。如果钱从A银行的账户转移到B银行的另一个账户?A银行是否须要锁定B银行数据库?如果转账正在进行中,银行A已经扣除了这笔款项,但银行B还没有存入该钱,这有点奇怪?事…

    2026年1月25日
    4
  • Java栈结构_栈java

    Java栈结构_栈javaJava栈结构概念典型的栈结构如下图所示:栈结构只能在一端操作,该操作端叫做栈顶,另一端叫做栈底。栈结构按照“后进先出”(LastInFirstOut,LIFO)的方式处理结点数据。栈的特点:其实栈结构是一种受限制的线性数据结构。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相

    2025年9月22日
    5
  • Hadoop教程(一) Hadoop入门教程「建议收藏」

    Hadoop教程(一) Hadoop入门教程「建议收藏」Hadoop是Apache开源组织的一个分布式计算开源框架(http://hadoop.apache.org/),用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。Hadoop框架中最核心设计就是:HDFS和MapReduce,HDFS实现存储,而MapReduce实现原理分析处理,这两部分是hadoop的核心。数据在Hadoop中处理的流程可以简单的按照下图来理解:数据通过Haddop的集群处理后得到结果,它是一个高性能处理海量数据集的工具 。

    2022年4月29日
    60
  • 咕咕机app官网_咕咕小哨

    咕咕机app官网_咕咕小哨P4996 咕咕咕

    2022年4月20日
    49
  • Windows 批处理(bat)语法大全

    Windows 批处理(bat)语法大全本文是学习bat整理的笔记,由于内容较多,建议结合右侧文章大纲查看。%~dp0[获取当前路径]%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录cd%~dp0:进入批处理所在目录cd%~dp0bin\:进入批处理所在目录的bin目录示例这个示例在win10x64测试正常::作用:以管理员身份安装Apached:c…

    2022年7月21日
    21
  • 缓存穿透,缓存击穿,缓存雪崩解决方案分析

    缓存穿透,缓存击穿,缓存雪崩解决方案分析前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案

    2022年6月30日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号