一、Java集合

1.概述

  一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就需要对对象进行存储。另一方面,使用Array存储对象具有一些弊端,而Java集合就像一种容器,可以动态的把多个对象的引用放到容器里。Java集合类可以用于存储数量不等的多个对象,还可以保存具有映射关系的关联数组。

  Java集合可分为Collection和Map两种体系:

  Collection接口:

    |- - - - -Set接口:元素无序、不可重复的集合,类似数学的“集合”

      |- - - - -HashSet(主要的实现类)、LinkedHashSet、TreeSet

    |- - - - -List接口:元素有序、可重复的集合,“动态“数组

      |- - - - -ArrayList(主要的实现类)、LinkedList(链表,有利于频繁的插入删除操作)、Vector(古老的实现类、线程安全的、一般不考虑使用)

  Map接口:具有映射关系“key-value对”的集合,类似数学的”函数“ y=f(x)

    |- - - - -HashMap、LinkedHashMap、TreeMap、Hashtable(子类:Properties )

2.集合的方法

(1)创建语句

Collection coll = new ArrayList();

(2)size():返回集合中元素的个数

System.out.println(coll.size());//输出0,集合为空

(3)add(Object obj):向集合中添加一个元素

coll.add();
coll.add("AA");
coll.add(new Date());
coll.add(new Person("xiaoming",));
System.out.println(coll.size());//输出4,有四个元素

(4)addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中

Collection coll2 = Arrays.asList(,,);
coll.addAll(coll2);
System.out.println(coll.size());//输出7,有七个元素

(5)isEmpty():判断集合是否为空

System.out.println(coll.isEmpty());//输出False,不为空

(6)clear():清空集合元素

coll.clear();
System.out.println(coll.isEmpty());//输出True,为空

(7)contains(Object obj):判断集合中是否含指定的对象元素,如果包含则返回True

//判断的依据是根据对象元素所在的类的equals()方法进行判断
//如果存入集合中的元素是自定义的类,需要重写equals()方法!否则将按照Object类中的equals比较对象的内存地址。
boolean b1 = coll.contains(new String("AA"));
System.out.println(b1);//输出true,注意String类重写了equals,比较的是字符串的内容
boolean b2 = coll.contains(new Person("xiaoming",));
System.out.println(b2);//输出false,Person这个自定义类没有重写equals方法,比较的是地址值。

(8)containsAll(Collection coll):判断当前集合中是否包含coll中的所有元素

Collection coll3 = new ArrayList();
coll3.add();
coll3.add("AA");
Boolean b3 = coll.containsAll(coll3);
System.out.println(b3);//输出true

(9)retainAll(Collection coll):求当前集合与coll的共有的元素,返回给当前集合

coll3.add();
coll.retainAll(coll3);
System.out.println(coll);//输出[123,AA]

(10)remove(Object obj):删除集合中的指定元素,删除成功返回true,否则返回false

boolean b4 = coll.remove("BB");
System.out.println(b4);//输出false,没有“BB”这个元素

(11)removeAll(Collection coll):从当前集合中删除包含在coll中的元素

Collection coll = new ArrayList();
coll.add();
coll.add("AA");
coll.add("BB");
coll.add("CC"); Collection coll2 = new ArrayList();
coll2.add();
coll2.add("AA"); coll.removeAll(coll2);
System.out.println(coll);//输出["BB","CC"]

(12)equals(Collection coll):判断集合中所有元素是否完全相同

Collection coll3 = new ArrayList();
coll3.add();
coll3.add(new String("AA"));
System.out.println(coll2.equals(coll3));//输出true

(13)hashCode():暂时跳过

(14)toArray():将集合转化为数组

Object[] obj = coll.toArray();

(15)iterator():返回一个Iterator接口的实现类的对象,进而实现集合的遍历

Iterator iterator = coll.iterator();
while(iterator.hasNext()){//Iterator提供的hasNext()方法返回一个boolean值,用于控制遍历
System.out.println(iterator.next());//next(),返回下一个元素
}

3.集合遍历的方法

(1)使用Iterator实现集合的遍历

Iterator iterator = coll.iterator();
while(iterator.hasNext()){//Iterator提供的hasNext()方法返回一个boolean值,用于控制遍历
System.out.println(iterator.next());//next(),返回下一个元素
}

(2)使用增强for循环实现遍历,也可用于数组的遍历

for(Object obj:coll){
System.out.println(obj);
}

(3)错误的写法

Iterator i = coll.iterator();
while((i.next())!= null){//这里执行了一次next()方法,指针指向下一个元素,导致隔行输出元素
System.out.println(i.next());//,这里又执行了一次next(),可能导致输出空指针,发生Java.util.NoSuchElementException的异常
}

4.ArrayList(List的主要实现类)在List中相对于Collection新增的方法

(1)“增”:void add(int index, Object ele):在指定的索引位置添加元素ele

List list = new ArrayList();
list.add();
list.add();
list.add(new String("AA"));
list.add(,);
System.out.println(list);//输出[555,123,456,AA]

(2)boolean addAll(int index,Collection eles):在指定的索引位置添加eles中的所有元素

(3)”查“:Object get(int index):获取指定索引位置的元素

Object obj = list.get();
System.out.println(obj);//输出555

(4)“删”:Object remove(int index):删除指定索引位置的元素

list.remove();
System.out.println(list.get());//输出123

(5)“改”:Object set(int index, Object ele):设置指定索引位置的元素为ele

list.set(,);
System.out.println(list.get());//输出111

(6)int indexOf(Object obj):返回obj在集合中首次出现的位置,没有的话返回-1

(7)int lastIndexOf(Object obj):返回obj在集合中最后一次出现的位置,没有返回-1

(8)List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex结束的左闭右开的一个子list

List list1 = list.subList(,);
System.out.println(list1);//输出[111,456],不包括AA

Java语法基础学习DayNine(Java集合)的更多相关文章

  1. Java语法基础学习DayTen(集合续)

    一.集合 1.Set:存储的元素是无序的.不可重复的 (1)无序性:无序性不等于随机性,无序指的是元素在底层存储的位置是无序的. (2)不可重复性:当向Set中添加相同的元素时,后添加的元素不能添加进 ...

  2. Java语法基础学习DayTwenty(反射机制续)

    一.Java动态代理 1.代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上. 2. ...

  3. Java语法基础学习DayNineteen(反射机制)

    一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...

  4. Java语法基础学习DayEight

    一.异常处理 1.结构 java.lang.Object |-----java.lang.Throwable |-----java.lang.Error:错误,java程序对此无能为力,不显式处理 | ...

  5. Java语法基础学习DaySeven

    ---恢复内容开始--- 一.包装类——Wrapper 1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类) boolean——Boolean          byte——Byte ...

  6. Java语法基础学习DayEighteen(常用类)

    一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...

  7. Java语法基础学习DaySix

    一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...

  8. Java语法基础学习DayThree

    一.流程控制语句补充 1.switch语句 格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体 ...

  9. Java语法基础学习DayTwentyOne(网络编程)

    一.IP地址和端口号 1.作用 通过IP地址,唯一的定位互联网上一台主机. 端口号标识正在计算机上运行的进程,不同进程有不同的端口号,被规定为一个16位的整数0~65535,其中0~1023被预先定义 ...

随机推荐

  1. hdu-1115 计算几何 求重心 凸多边形 面积

    思想是分割成三角形,然后求三角形的重心.那么多边形重心就是若干个三角形的重心带权求中心,可以用质点质心公式. #include <cstdio> #include <iostream ...

  2. python3—列表

    列表是什么 name = ["jim", "lilei", "lucy"] #方括号表示,逗号分隔 print(name) print(na ...

  3. lanmp中环境变量的更改方法

    1.vim /etc/profile 改成: export PATH=$PATH:/www/wdlinux/phps/71/bin/ 然后运行: source /etc/profile

  4. P2375 [NOI2014]动物园

    考虑kmp. 这个题的主要问题就在于怎样使复杂度是正确的O(n). 可以先预处理一个数组cnt[]表示不考虑不能相交这个限制,有多少个border. 这个东西其实也就是fail树上的深度. 然后考虑怎 ...

  5. centos 7 源代码安装mysql5.6

    ###### mysql ######### 引言:这里选用mysql5.6版本,5.7版本编译时间需要几个小时. 编译安装环境: yum -y install make gcc-c++ cmake ...

  6. CentOS下yum命令详解

    CentOS下yum命令详解 Yum: 即Yellowdog Update Modifier,是一种基于rpm的包管理工具 yum命令使用示例 显示yum仓库 显示所有仓库 yum repolist ...

  7. DP 传球问题

    洛谷P1057 传球问题 分析:经过m次传球到第i个人的方法可以由经过m-1次传球到第i个人和到第i-1个人传递得来 设dp[i][j]为经过j次传球后到达第i个人的方法数,可得到状态转移方程为: d ...

  8. 『Github』本地项目更新到服务器

    对于已经新建到服务器的项目,我们在本地有了新的修改之后,想要同步到服务器时的操作. 1.clone代码 1.把目标工程clone到本地,使用指令: >git clone https://gith ...

  9. Leetcode 999. 车的可用捕获量

    999. 车的可用捕获量  显示英文描述 我的提交返回竞赛   用户通过次数255 用户尝试次数260 通过次数255 提交次数357 题目难度Easy 在一个 8 x 8 的棋盘上,有一个白色车(r ...

  10. 详解Oracle数据字典

    Oracle通过数据字典来管理和展现数据库信息,数据字典通常储存数据库的元数据,是数据库的“数据库”.通常说的数据字典由4部分组成:内部RDBMS(X$)表.数据字典表.动态性能视图(V$)和(静态) ...