Collection的子类

Collection的主要方法:

boolean add(Object o) //添加对象到集合
boolean remove(Object o)//删除指定对象
int size()//返回集合大小
boolean contains(Object o)//查找集合中是否有指定的对象
boolean isEmpty()//判断集合是否为空
Iterator iterator()//返回一个迭代器
boolean containsAll(Collection c)//查找集合中是否有集合c中的元素
boolean addAll(Collection c)//将集合c中所有的元素添加给该集合
void clear()//删除集合中所有元素
void removeAll(Collection c)//从集合中删除c集合中也有的元素
void retainAll(Collection c)//从集合中删除集合c中不包含的元素

一、List:

  1. 可以允许重复对象
  2. 可以插入多个null元素
  3. 是一个有序的容器,输出的顺序就是插入的顺序
  4. 常用的实现类有:ArrayList、LinkedList和Vector,ArrayList数组实现,LinkedList链表实现。
void add(int index,Object element)//在指定位置上添加一个对象
boolean addAll(int index,Collection c)//将集合c的元素添加到指定的位置
Object get(int index)//返回List中指定位置的元素
int indexOf(Object o)//返回第一个出现元素o的位置.
Object remove(int index)//删除指定位置的元素
Object set(int index,Object element)//用元素element取代位置index上的元素,返回被取代的元素
void sort()

二、Set:

  1. 不可重复(重复指的是a1.equals(a2)为true)
  2. 无序容器,你无法保证每个元素的存储顺序
  3. 只允许一个null元素,如果添加多个null会自动过滤
  4. 常用的实现类HashSet,LinkedHashset以及TreeSet

三、Map

  1. Map不是collection的子接口或者实现类,Map是一个接口
  2. Map的每个Entry都持有两个对象,也就是一个键一个值,键对象必须唯一
  3. Map里可以有多个null值但只能有一个null键
  4. 常用的实现类:HashMap、LinkedHashMap、Hashtable和TreeMap
boolean equals(Object o)//比较对象
boolean remove(Object o)//删除一个对象
put(Object key,Object value)//添加key和value

四、总结:

  1. 如果涉及到堆栈,队列(先进后出)等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

  2. 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

  3. 要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法

  4. 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

  5. ArrayList、HashSet/LinkedHashSet、PriorityQueue、LinkedList是线程不安全的,可以使用synchronized关键字,或者类似下面的方法解决:

    List list = Collections.synchronizedList(new ArrayList(...));
    

五、几个面试常见问题:

  1. Q:ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?

    A:Vector和HashTable是线程同步的(synchronized)。性能上,ArrayList和HashMap分别比Vector和Hashtable要好。

  2. Q:大致讲解java集合的体系结构
    A:List、Set、Map是这个集合体系中最主要的三个接口。
    其中List和Set继承自Collection接口。
    Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
    List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
    Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
    SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。

  3. Q:Comparable和Comparator区别
    A:调用java.util.Collections.sort(List list)方法来进行排序的时候,List内的Object都必须实现了Comparable接口。
    java.util.Collections.sort(List list,Comparator c),可以临时声明一个Comparator 来实现排序。

Collection的继承关系

Collection的子类相关推荐

  1. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  2. 2接口详解_java集合【2】——— Collection接口详解

    一.Collection接口简介 二.Collection源码分析 三.Collection的子类以及子类的实现 3.1 List extend Collection 3.2 Set extend C ...

  3. 集合Collection总览

    一.集合(Collection)介绍 1.1为什么需要Collection Java是一门面向对象的语言,就免不了处理对象 为了方便操作多个对象,那么我们就得把这多个对象存储起来 想要存储多个对象(变 ...

  4. Java基础-Collection集合接口(List及Set)

    Collection集合接口 1.Collection接口的常用方法 2.Collection集合迭代 3.contains方法解析 4.集合中元素的删除 5.List接口的特有方法 6.Set接口 ...

  5. #Java教程:集合 #Collection、List、Set #ArrayList、LinkedList、Vector、HashSet、TreeSet #一个斗地主小游戏@FDDLC

    一.概述 Java单列集合中最顶层的是Collection接口,Collection下又分List和Set两大类: 学习Java集合的时候,建议自顶向下学:先学Collection,再学List和Se ...

  6. 黑马毕向东Java课程笔记(day14-1——14-11):集合类(集合框架)——集合类分类与特点+List集合接口及其子类

    1.集合类特点   为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式.   数组和集合类同是容器,有何不同 ...

  7. 【JavaSE】Collection 接口和常用方法

    文章目录 1. Collection 接口实现类的特点 2. Collection 接口常用方法 3. Collection接口遍历元素方式1- 使用Iterator(迭代器) 4. Collecti ...

  8. 集合框架Collection、Map查找表(Java SE第三阶段9)

    目录 Collection List和Set 集合方法 集合持有对象的引用 集合间操作方法 Iterator迭代器 增强型for循环 泛型机制 List List(ArrayList和LinkedLi ...

  9. Java·Collection内部细剖

    1. Java·Collection内部细剖 文章目录 1. Java·Collection内部细剖 1.1. 大纲 1.1.1. Collection 1.1.2. Iterable 1.1.3. ...

最新文章

  1. 人生快乐之道(组图)
  2. 网易是世界最好的公司
  3. 印象笔记终于支持Markdown了 !你还会再用其他笔记吗?
  4. CF650E-Clockwork Bomb【并查集】
  5. 嵌入式linux tftp rpm,嵌入式linux的tftp配置
  6. mysql 全文本检索的列_Mysql 全文本检索
  7. Linux容器间共享内存,C++容器模板在共享内存中的使用
  8. 【数据结构----笔记2】查找算法之【哈希查找或散列查找】
  9. C#导入导出Excele数据
  10. 深入理解 JVM 之 垃圾回收机制
  11. zend7 常用快捷键
  12. c++ 将变量有序保存在txt文件中_python读写文件(四)
  13. html3d转换浏览器设定,R:使用rgl生成可以在Web浏览器中查看的3d可旋转图形?
  14. python tkinter 窗口最大化
  15. win10电脑如何取得管理员权限
  16. Flutter路由管理和页面参数的传递(获取返回)
  17. [sdx12]sdx12从板子导出fdt文件转化为dtsi文件方法
  18. 炸金花游戏(5)--动态收敛预期胜率的一种思路
  19. 云栖大会上宣布即将开源的手淘Atlas什么来头?
  20. Visual Studio 2022 的下载

热门文章

  1. linux查看dat文件权限,ORA-01565: error in identifying file '+DATA/rac/dataile/datfile/system'
  2. 分析为什么加锁和解锁操作是原子的
  3. PTP授时服务器(NTP网络时间服务器)技术方案应用
  4. java tcp 获取状态_TCP连接状态
  5. 夜夜除非,好梦留人睡
  6. Shell echo命令
  7. .net mvc controler有哪些返回值
  8. python文本相似度检测框架_机器学习入门之使用gensim 的 doc2vec 实现文本相似度检测...
  9. 机器人钩阿木木_机器人钩什么英雄最可怕?诺手不算什么,图四钩过来瞬间团灭...
  10. 联想集团单季营收破1200亿:净利40.9亿 同比增62%