一、总结

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

Java学习总结之第十一章 Java集合相关推荐

  1. java学习笔记(9) 第9章 Java项目-房屋出租系统

    Java项目-房屋出租系统 代码打包--百度网盘链接: 9.1 房屋出租系统-需求 9.1.1 项目需求说明 9.2 房屋出租系统-界面 9.3 房屋出租系统-设计(!!) 9.4 房屋出租系统-实现 ...

  2. 第十一章 Java IO编程

    第十一章 Java IO编程 11.1 文件操作类:File java.io包中,如果要进行文件自身操作(创建,删除),只能依靠java.io.File类完成. NO. 方法 类型 描述 1 publ ...

  3. 视频教程-Java学习指南(Swing高级篇)-Java

    Java学习指南(Swing高级篇) 邵发,清华大学毕业,从业软件开发十余年,自2015年起致力于C/C++/Java等基础教育领域,希望能通过提高每一个个体的素质来推动中国IT业的整体发展.代表作: ...

  4. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

  5. java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

    转载自  java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWrite ...

  6. java学习笔记(13) 第13章 - 常用类

    第13 章常用类-目录 13.1 包装类 13.1.1 包装类的分类.包装类和基本数据的转换.案例演示.课堂测试 13.1.2 包装类型和String 类型的相互转换 13.1.3 Integer 类 ...

  7. 《java学习之路》第一章:初识java第二节:helloworld

    嗨大家好,我是埪动白,前一段时间由于一些原因,java学习之路停更了,我向大家道歉.今天我们来学习下一节 第一章:初识java 第二节:hello world 如果哪位同学没有看第一节,建议先看一下, ...

  8. java学习笔记(8) 第8章(下)- 面向对象编程(中级部分) - 练习题

    目录: 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目11 题目12 题目13 题目14 题目15 题目16 题目1 1.定义一个Person类 {name, ...

  9. Java 学习笔记(二十一)

    正则表达式 正则表达式 底层实现分析 正则表达式语法 转义符 字符匹配符 选择匹配符 限定符 定位符 分组 非捕获分组 非贪心匹配 应用实例 汉字验证 邮编验证(不完全) QQ 号验证 手机号验证 U ...

最新文章

  1. c# 通过字体对话框获取字体名称和字体大小_【插件】PS、AI、ID都能用的字体管理插件...
  2. java urlrewriter_java url重写技术(UrlReWriter)
  3. JavaScript 操作 COM 控件
  4. grub引导iso光盘[可用于ntfs]
  5. 两对光纤收发器用网线连接_为什么现在的人不喜欢用网线,反而更爱用光纤来传输呢?涨知识了...
  6. leetcode题解434-字符串中的单词数(双指针经典)
  7. 企业级内网的域控环境搭建教程
  8. MaxCompute实战之数据存储
  9. html轮播图水平传送带,经典的白富美型jQuery图片轮播插件
  10. MySQL数据库(一)服务器数据库的搭建和远程访问
  11. Android项目 moudle和library转换
  12. SEM数据该如何分析?
  13. “泰迪杯”挑战赛 - 通过聚类方法对航空客运的客户进行细分
  14. C语言程序设计摘苹果,陶陶摘苹果(qb编程)怎么做?
  15. 2023年考ACP云计算
  16. mysql 字符集 对勾_css如何在菜单上实现对勾?(代码)
  17. PLC脆弱性评估及相应解决方案
  18. 一颗红心,三手准备,分别基于图片(img)/SCSS(样式)/SVG动画实现动态拉轰的点赞按钮特效
  19. 后台控制游戏开关_今天购买这些开关游戏
  20. PostgreSQL 儒略历学习资料

热门文章

  1. Qt 【关于控件样式,鼠标进入、离开、点击】
  2. kv存储对抗关系型数据库
  3. oledb 操作 excel
  4. 【DP】HDU 2189 悼念512汶川大地震遇难同胞——来生一起走
  5. Spring中的动态代理
  6. 详解EBS接口开发之采购申请导入
  7. C库函数qsort七种使用方法示例
  8. [转载] 晓说——第9期:多如牛毛严酷无比的美国那些法
  9. 用 Python 语言来写游戏
  10. 20180601]函数与标量子查询2.txt