Collection的子类
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:
- 可以允许重复对象
- 可以插入多个null元素
- 是一个有序的容器,输出的顺序就是插入的顺序
- 常用的实现类有: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:
- 不可重复(重复指的是a1.equals(a2)为true)
- 无序容器,你无法保证每个元素的存储顺序
- 只允许一个null元素,如果添加多个null会自动过滤
- 常用的实现类HashSet,LinkedHashset以及TreeSet
三、Map
- Map不是collection的子接口或者实现类,Map是一个接口
- Map的每个Entry都持有两个对象,也就是一个键一个值,键对象必须唯一
- Map里可以有多个null值但只能有一个null键
- 常用的实现类:HashMap、LinkedHashMap、Hashtable和TreeMap
boolean equals(Object o)//比较对象
boolean remove(Object o)//删除一个对象
put(Object key,Object value)//添加key和value
四、总结:
如果涉及到堆栈,队列(先进后出)等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
ArrayList、HashSet/LinkedHashSet、PriorityQueue、LinkedList是线程不安全的,可以使用synchronized关键字,或者类似下面的方法解决:
List list = Collections.synchronizedList(new ArrayList(...));
五、几个面试常见问题:
Q:ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?
A:Vector和HashTable是线程同步的(synchronized)。性能上,ArrayList和HashMap分别比Vector和Hashtable要好。
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列进行排序。Q:Comparable和Comparator区别
A:调用java.util.Collections.sort(List list)方法来进行排序的时候,List内的Object都必须实现了Comparable接口。
java.util.Collections.sort(List list,Comparator c),可以临时声明一个Comparator 来实现排序。
Collection的继承关系
Collection的子类相关推荐
- Java开发知识之Java中的集合上List接口以及子类讲解.
Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...
- 2接口详解_java集合【2】——— Collection接口详解
一.Collection接口简介 二.Collection源码分析 三.Collection的子类以及子类的实现 3.1 List extend Collection 3.2 Set extend C ...
- 集合Collection总览
一.集合(Collection)介绍 1.1为什么需要Collection Java是一门面向对象的语言,就免不了处理对象 为了方便操作多个对象,那么我们就得把这多个对象存储起来 想要存储多个对象(变 ...
- Java基础-Collection集合接口(List及Set)
Collection集合接口 1.Collection接口的常用方法 2.Collection集合迭代 3.contains方法解析 4.集合中元素的删除 5.List接口的特有方法 6.Set接口 ...
- #Java教程:集合 #Collection、List、Set #ArrayList、LinkedList、Vector、HashSet、TreeSet #一个斗地主小游戏@FDDLC
一.概述 Java单列集合中最顶层的是Collection接口,Collection下又分List和Set两大类: 学习Java集合的时候,建议自顶向下学:先学Collection,再学List和Se ...
- 黑马毕向东Java课程笔记(day14-1——14-11):集合类(集合框架)——集合类分类与特点+List集合接口及其子类
1.集合类特点 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同 ...
- 【JavaSE】Collection 接口和常用方法
文章目录 1. Collection 接口实现类的特点 2. Collection 接口常用方法 3. Collection接口遍历元素方式1- 使用Iterator(迭代器) 4. Collecti ...
- 集合框架Collection、Map查找表(Java SE第三阶段9)
目录 Collection List和Set 集合方法 集合持有对象的引用 集合间操作方法 Iterator迭代器 增强型for循环 泛型机制 List List(ArrayList和LinkedLi ...
- Java·Collection内部细剖
1. Java·Collection内部细剖 文章目录 1. Java·Collection内部细剖 1.1. 大纲 1.1.1. Collection 1.1.2. Iterable 1.1.3. ...
最新文章
- 人生快乐之道(组图)
- 网易是世界最好的公司
- 印象笔记终于支持Markdown了 !你还会再用其他笔记吗?
- CF650E-Clockwork Bomb【并查集】
- 嵌入式linux tftp rpm,嵌入式linux的tftp配置
- mysql 全文本检索的列_Mysql 全文本检索
- Linux容器间共享内存,C++容器模板在共享内存中的使用
- 【数据结构----笔记2】查找算法之【哈希查找或散列查找】
- C#导入导出Excele数据
- 深入理解 JVM 之 垃圾回收机制
- zend7 常用快捷键
- c++ 将变量有序保存在txt文件中_python读写文件(四)
- html3d转换浏览器设定,R:使用rgl生成可以在Web浏览器中查看的3d可旋转图形?
- python tkinter 窗口最大化
- win10电脑如何取得管理员权限
- Flutter路由管理和页面参数的传递(获取返回)
- [sdx12]sdx12从板子导出fdt文件转化为dtsi文件方法
- 炸金花游戏(5)--动态收敛预期胜率的一种思路
- 云栖大会上宣布即将开源的手淘Atlas什么来头?
- Visual Studio 2022 的下载
热门文章
- linux查看dat文件权限,ORA-01565: error in identifying file '+DATA/rac/dataile/datfile/system'
- 分析为什么加锁和解锁操作是原子的
- PTP授时服务器(NTP网络时间服务器)技术方案应用
- java tcp 获取状态_TCP连接状态
- 夜夜除非,好梦留人睡
- Shell echo命令
- .net mvc controler有哪些返回值
- python文本相似度检测框架_机器学习入门之使用gensim 的 doc2vec 实现文本相似度检测...
- 机器人钩阿木木_机器人钩什么英雄最可怕?诺手不算什么,图四钩过来瞬间团灭...
- 联想集团单季营收破1200亿:净利40.9亿 同比增62%