集合框架有何好处
集合弥补了数组的缺陷,他比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合可使用与不同场合
数组和集合的区别
数组长度固定,集合长度可以动态改变
定义数组时必须指定元素类型,集合默认所有元素都是Object
无法直接获取数组中实际元素的个数,集合可以通过size()直接获取元素个数
集合有多种实现方式和不同的适合场合,而不像数组仅采用分配连续空间方式。
集合以接口,类的形式存在,具有面向对象的三大特征,提高了软件的开发效率
Hashtable和HashMap的异同
实现原理、功能相同,可以互用
主要区别
Hashtable继承Dictionary类,HashMap实现Map接口
Hashtable线程安全,HashMap线程非安全
Hashtable不允许null值,HashMap允许null值
泛型集合的好处
严格限制存入元素的数据类型,从集合中取出元素时无需进行强制类型转换,避免了ClassCastException异常。
Collections算法类
Collections和Collection不同,前者是集合的操作类,后者是集合接口
Collections提供的常用静态方法
sort():排序
binarySearch():查找
max()\min():查找最大\最小值
集合类有哪些
Collection(接口)(由List和Set两部分组成)
List(接口)
LinkedList(类)
ArrayList(类)
Vector(类)
stack(类)
Set接口
Map接口
Hashtable(类)
HashMap(类)
WeakHashMap(类)
如何使用集合类
如果涉及到堆栈、队列等操作,应当考虑List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList
哈希表的操作,作为Key的对象要正确复写equals和hashCode方法
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果将来要将ArrayList换成LinkedList时,客户端代码不用改变
List可以有类似数组的下标操作,且允许有相同的元素存在;Map是以键值对(KeyValue)的形式存在,不能存在相同的键
常用集合类
ArrayList类:
ArrayList实现可变大小的数组,长度随着元素的增加而变化,而且可以存在重复的元素
HashMap类:
允许null,即null key,null value。且存在的形式是key-value形式,不允许有key重复
Collection的使用
Collection接口是什么
Collection接口是可以理解成动态的数组、集合,和数组类似,但不同的是集合可以任意扩充大小
Collection是最基本的接口,Java SDK提供的类都是继承自Collection的子接口,例如“List”、“Set”
Collection接口特点
性能高
易扩展
易修改
List接口的使用
List接口的特点
List接口可以存放任意的数据,且在接口中,内容可以重复
List中提供了高效的插入和移除多个元素的方法
List常用(实现)子类
ArrayList(实现类)
例:List
Vector(实现类)
例:List
ArrayList和Vector区别
|ArrayListVector
推出时间JDK1.2后JDK1.0后
性能异步处理,性能高同步处理,性能低
线程安全非线程安全线程安全
Set的使用
Set接口的特点
Set接口可以存放任意的数据,且在接口中,数据不可以重复(注意和List进行区别)
Set接口常用子类
HashSet
Set
TreeSet
Set
HashSet和TreeSet的区别
HashSet与TreeSet都是间接实现了Set接口,同样拥有add、remove等方法
HashSet是无序存放的、而TreeSet实现是有序存放(ASCII顺序存放)
Map的使用
Map的特点
Map接口存放数据是以键值对的形式存放,例如:
key -> value
"name" -> "尼古拉斯赵四"
"age" -> "33"
键(key)的类型要一致,值(value)的类型也要一致。
Map常用实现类(实现类的方法和List、Set的方法不一样)
HashMap
Map maps = new HashMap<>();
maps.put("name","詹姆斯刘能");
maps.put("age","24");
List接口常用方法
boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size()返回列表中的元素个数
Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o) 判断列表中是否存在指定元素
boolean remove(Object o) 从列表中删除元素
Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始
LinkedList常用方法
void addFirst(Object o) 在列表的首部添加元素
void addLast(Object o) 在列表的末尾添加元素
Object getFirst() 返回列表中的第一个元素
Object getLast() 返回列表中的最后一个元素
Object removeFirst() 删除并返回列表中的第一个元素
Object removeLast() 删除并返回列表中的最后一个元素
Map接口常用方法
Object put(Object key, Object val) 以“键-值”对的方式进行存储
Object get(Object key) 根据键返回相关联的值,如果不存在指定的键,返回null
Object remove(Object key) 删除由指定的键映射的“键-值对”
int size() 返回元素个数
Set keySet() 返回键的集合
Collection values() 返回值的集合
boolean containsKey(Object key) 如果存在由指定的键映射的“键-值对”,返回true
迭代器iterator的使用(接口)
iterator自带常用方法
hasNext:如果仍有元素可以迭代,则返回true
next:返回迭代下一个元素
remove:从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)
Set
Collection
欢迎工作一到五年的Java工程师朋友们加入Java群: 891219277
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!