Java学习总结之第十一章 Java集合

一、总结

1. 所有Java集合类都位于java.util包中,与Java数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。

2. Set、List、Map统称为Java集合。

3. 在将对象存储到集合类中时,为加快存储速度,要求被在座对象的类中必须覆盖equals()方法和hashCode()方法。即如果一个类重新实现了equals()方法,那么也应该重新实现hashCode()方法,并且保证当两个对象相等时,它们的哈希码也相同。

4. <? extends Object> 对集合类的范型设定了上限,表示接受Object类型及其子类型。

<? super String> 对集合类的范型设定了下限,表示接受String类型及其父类型。

5. 遍历集合可使用“for(Type t : c){…}”语法,其中c表示需要遍历的集合,Type表示集合内元素的类型,t引用每次从集合中取出的当前元素。

6. 对于Java集合,还有一个实用类,即java.util.Collections,它的一部分方法专门用于操纵List类型集合,还有一部分方法可用于操纵所有的Collection类型或Map类型集合。

二、Collection和Iterator接口

1. Collection接口的方法

方法

描述

boolean add(Object o)

向集合中加入一个对象的引用

void clear()

删除集合中的所有对象,即不再持有这些对象的引用

boolean contains(Object o)

判断在集合中是否持有特定对象的引用

Iterator iterator()

返回一个Iterator对象,可用它来遍历集合中的元素

boolean remove(Object o)

从集合中删除一个对象的引用

int size()

返回集合中元素的数目

Object[] toArray()

返回一个数组,该数组包含集合中的所有元素

boolean isEmpty()

判断集合是否为空

注:Set接口和List接口继承了Collection接口,而Map接口没有继承Collection接口,所以Set对象和List对象可以调用以上方法,但Map对象不能调用以上方法。

2. Iterator接口中声明了以下方法:

a) hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true。

b) next():返回下一个元素。

c) remove():从集合中删除上一个由next()方法返回的元素。

3. 如果集合中的元素没有排序,Iterator遍历集合中元素的顺序是任意的,并不一定与向集合中加入元素的顺序保持一致。

4. 当通过Collection集合的iterator()方法得到一个Iterator对象后,如果当前线程或其他线程接着又通过Collection集合的一些方法对集合进行了修改操作(调用当前Iterator对象的remove()方法来修改集合除外),接下来访问这个Iterator对象的next()方法会导致java.util.ConcurrentModificationException运行时异常。

三、Set(集)

1. Set接口主要有两个实现类:HashSet和TreeSet。HashSet类有一个子类LinkedHashSet类,它不仅实现了哈希算法,而且实现了链表数据结构。TreeSet类实现了SortedSet接口,具有排序功能。此外还有一个以数组为基础实现的Set类CopyOnWriteArraySet。

2. Set系列类的方法不支持插入和修改。同时Set集合中不能有重复的对象。

3. Set采用对象的equals()方法比较两个对象是否相等,即判断这个某个对象是否已经存在于集合中。

4. 当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。

5. TreeSet支持两种排序方式:自然排序和客户化排序。在默认情况下,TreeSet采用自然排序方式。

6. TreeSet调用对象的compareTo()方法比较集合中对象的大小 ,然后进行升序排列,这种排序方式称为自然排序。使用自然排序时,只能向TreeSet集合中加入同类型的对象,并且这些对象的类必须实现了Comparable接口。

7. 最适合TreeSet排序的是不可变类。

8. TreeSet类支持客户化排序,可以先创建一个实现java.util.Comparator<Type>接口的类,<Type>指定被比较的对象的类型,Comparator有个compare(Type x,Type y)方法,用于比较两个对象的大小。当compare(x,y)的返回值大于0时,表示x>y,返回值小于0时,表示x<y,返回值等于0时,表示x等于y。示例代码如下:

import java.util.Comparator;

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

public class CustomerComparator implements Comparator{

public int compare(Customer x,Customer y){

if(x.getName().compareTo(y.getName()) > 0)

return -1;

if(x.getName().compareTo(y.getName()) <0 )

return 1;

return 0;

}

public static void main(String[] args) {

Set<Customer> set = new TreeSet<Customer>(new CustomerComparator());

Customer customer1 = new Customer("Tom",15);

Customer customer2 = new Customer("Jack",16);

Customer customer3 = new Customer("Mary",26);

set.add(customer1);

set.add(customer2);

set.add(customer3);

Iterator<Customer> it = set.iterator();

while(it.hasNext()){

Customer customer = it.next();

System.out.println(customer.getName()+" "+customer.getAge());

}

}

}

四、List(列表)

1. List中的元素以线性方式存储,集合中允许存放重复对象。List接口的主要的实现类有ArrayList(长度可变的数组)和LinkedList(链表)。并且LinkedList单独具有addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()方法,这些方法使得LinkedList可以作为堆栈、队列和双向队列来使用。

2. List只能对集合中的对象按索引位置排序,如果想要对List中的对象按其他特定方式排序,可以借助Comparator接口和Collections类中的sort方法。

3. List的listIterator()方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,此外还提供了专门操纵列表的方法:

add()

向列表中插入一个元素

hasNext()

判断列表中是否还有下一个元素

hasPrevious()

判断列表中是否还有上一个元素

next()

返回列表中的下一个元素

previous()

返回列表中的上一个元素

4. java.util.Arrays类的asList()方法能够把一个java数组包装为一个List对象,这个List对象代表固定长度的数组,所有对List对象的操作都会被作用到底层的java数组,因此不能调用这种List对象的add()和remove()方法。

五、Map(映射)

1. Map的entrySet()方法返回一个Set集合,在这个集合中存放了Map.Entry类型的元素,每个Map.Entry对象代表Map中的一对键与值。

2. Map有两种比较常用的实现,HashMap和TreeMap,另外还有以链表和哈希表为基础实现的LinkedHashMap类。使用HashMap时,改写了equals()方法时,同时要改写hashCode()方法;TreeMap实现了SortedMap接口,能对键对象进行排序,支持自然排序和客户化排序。如果要对键进行客户化排序,可调用它的TreeMap(Comparator comparator)构造方法,参数comparator指定具体的排序方式。

3. Map的keySet()方法返回集合中所有键对象的集合。

转载于:https://www.cnblogs.com/jerrychoi/archive/2010/03/12/1684395.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

text/html与text/plain的区别

1.ContentType 属性指定响应的 HTTP 内容类型。如果未指定 ContentType&#xff0c;默认为 text/HTML。 2.text/html按网页形式解析报文体 text/plain为无格式文本&#xff0c;即直接将报文体输出 3.当输出的报文体中含有html结构型标签如head ,body,html等时&#xff0c;浏览器…

分析三星提供的sd_fusing文件夹(用来制作SD卡启动镜像)

以下内容源于网络资源的学习与整理&#xff0c;如有其侵权请告知删除。 参考博客 uboot分析&#xff1a;SD卡镜像制作脚本分析 - 走看看 如何烧写u-boot到SD卡 S5PV210 Uboot开发与移植01&#xff1a;Uboot概述&#xff08;推荐&#xff09; 一、sd_fusing文件夹简介 1、文件…

Linux系统管理----LVM逻辑卷和磁盘配额作业习题

1&#xff0e;为主机增加80G SCSI 接口硬盘 2&#xff0e;划分三个各20G的主分区 [rootlocalhost chen]# fdisk /dev/sdb 命令(输入 m 获取帮助)&#xff1a;n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default r…

外存——S5PV210的外部存储器(nandflash与inand的介绍)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 关于iNand ,oneNand,moviNAND的区别——大家一起来扫盲 - 嵌入式系统 总结 本文首先介绍了目前主流的外存设备有哪些。 然后介绍了NandFlash芯片的接口、结构、常见操作&#xff0c;以及…

软件定义的数据中心已经来临

VMware和微软提供了软件定义的数据中心的解决方案。在软件定义的数据中心中&#xff0c;所有的资源——包括计算、存储、可用性、网络和安全等——都实现了虚拟化和自动化。本文主要关注的是其中新加入的特性&#xff1a;虚拟化网络与安全。 为了提供一个完全自动化的数据中心&…

21 个非常有用的 .htaccess 提示和技巧

Apache Web 服务器可以通过 .htaccess 文件来操作各种信息&#xff0c;这是一个目录级配置文件的默认名称&#xff0c;允许去中央化的 Web 服务器配置管理。可用来重写服务器的全局配置。该文件的目的就是为了允许单独目录的访问控制配置&#xff0c;例如密码和内容访问。下面是…

【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页 任务50&#xff1a;Identity MVC&#xff1a;DbContextSeed初始化GASA 2019-03-02 14:09 阅读:16 评论:0任务49&#xff1a;Identity MVC&#xff1a;Model前端验证GASA 2019-03-02 14:08 阅读:6 评论:0任务48&#xff1a;I…

PWM信号作用示例(调节LED台灯亮度)

以下内容源于网络资源的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 比如你有5V电源&#xff0c;要控制一台灯的亮度。 &#xff08;1&#xff09;传统方式 串联一个可调电阻&#xff0c;改变电阻&#xff0c;灯的亮度就会改变。 &#xff08;2&#xff09…

第二十二章 6未命名的命名空间

//第二十二章 6未命名的命名空间 /*#include <iostream> using namespace std; namespace {int x2; } namespace {int y3; } int main() {cout<<"x:"<<x<<" y:"<<y<<endl; //输出的结果就是未命名空间的x和y的值&…

阅读,

1&#xff0c;2月28日&#xff0c;杭州&#xff0c;浙江省最大规模招聘会&#xff0c;超过5万名大学生在雨中等待进场。2009年&#xff0c;中国需要就业的高校毕业生超过700万人&#xff0c;截至9月1日就业率为74%&#xff08;国家统计局数字&#xff09;。中国已决定放缓高校扩…

uboot中关于LCD的代码分析

以下内容源于朱有鹏《物联网大讲坛》课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 1、在uboot-jiuding/board.c中&#xff0c;init_sequence中的display_banner中的open_backlight函数中&#xff0c;给GPF3_5输出高电平。 注释掉这一句uboot的LCD显示照样正常的&am…

HDU-1069 Monkey and Banana

链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1069 题意&#xff1a;n种长方形木块&#xff0c;长宽高x,y,z&#xff0c;要求叠放要按照长宽严格递减&#xff08;不能相等&#xff09;&#xff0c;问最高能叠多高 思路&#xff1a;由于一种木块有三种叠放方式&a…

对 makefile 中 override 优先级的学习体会

上例子 override gaoabcgao12345all:  echo $(gao) 运行的结果&#xff0c;make abc override 指令比其他的变量赋值优先级要高。 结束转载于:https://www.cnblogs.com/gaojian/archive/2012/10/04/2711412.html

寒假自助游之济南

以前很少去旅行&#xff0c;主要原因是孩子年龄比较小&#xff0c;再就是经济方面的考虑。如今孩子渐渐长大了&#xff0c;行路与读万卷书同等重要&#xff0c;遂决定以后无论寒暑假都应陪孩子到处走一走。我不喜欢那种走马观花式的跟团游&#xff0c;因而自助游便是最佳选择。…

与fastboot相关的知识

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 一、fastboot的基本知识 1、什么是fastboot &#xff08;1&#xff09;fastboot是android使用的一种刷机方法。 android系统设计了2种刷机方式&#xff1a;fastboot和recovery。 &#xf…

OpenCL向量相加

原文http://www.olcf.ornl.gov/training_articles/opencl-vector-addition/ 本文仅仅是为了学习OpenCL而做的的相关翻译。 由于原文中的例子不能在我的环境中运行&#xff0c;因此做了一些改动。 通过这个例子能很好地了解OpenCL的编程模型。 1. 简介 这个例子是表示了两个向量…

AndroidManifest.xml文件解析(转帖)

原帖地址&#xff1a;http://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html 一、关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录&#xff0c;描述了package中暴露的组件&#xff08;activities, services, 等…

windows 7系统搭建本地SVN服务器的过程

1、安装svn:TortoiseSVN-1.7.9.23248-x64-svn-1.7.6; 1、在PC机的D盘创建如下目录&#xff1a;D:\svn\project\workspace; 2、右键点击目录workspace文件&#xff0c;选择Tortoise->Create repository here,即在此创建版本库&#xff08;Y&#xff09;; 然后你就会看到D:\sv…

x210开发板的BSP(其中使用buildroot文件夹建立rootfs)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;buildroot详解和分析_Alex-wu的博客-CSDN博客_buildroot 板级支持包&#xff08;BSP&#xff0c;Board Support Package&#xff09;&#xff0c;是由引导程序&#xff08;Boo…