集合
引入
数组:类型、长度确定;有序、可重复;方法有限,无法获取元素个数。
集合:对象<泛型>、长度可变;无/有序、可重复/不可重复;方法多样。
使用场景:Web工程中,集合保存对象后被Gson转化为JSON字符串在网络中传输
集合总框架
配合底层实现原理重写方法(equals/hashCode/compareTo/compare)
Collection接口
常用方法:
遍历
1、Iterator:遍历集合
2、forEach:遍历结合和数组
List接口实现类☆
ArrayList
动态数组,顺序表
源码分析
常用方法
明确remove中的参数是索引还是对象
LinkedList
源码分析:Node对象,有前后属性,实现双向链表
Set接口实现类
HashSet
有序无序是指元素在数组中存放是否按照索引依次存放;无序即通过计算得到存储位置,故而添加顺序和遍历顺序不一样
底层原理
//HashSet底层:数组+链表 -> hashCode(),equals() hash值 = 散列码
LinkedHashSet
存储还是无序的,只不过存放的时候,生成的链表记录elements的添加顺序,遍历的时候恰巧和添加顺序一样
TreeSet
存储相同类型,且可以排序(自然/定制)
//int string 等基本数据类型可以自动排序,比较用的是compareTo()方法,而不是equals()
//自定义对象需要在此对象类中重写compareTo方法<实现Comparable接口>
/自然排序/
//比较,实质还是做减法,后返回数值
//name.compareTo()方法是String类中重写的方法,而不是递归调用
/定制排序/
通过Comparator比较器的匿名实现类的匿名对象,重写compare方法进行比较;后将此实例放入TreeSet构造器中实现定制排序
Map☆
HashMap*
//底层实现
//map里面是Entry类型的一维数组
//Entry是一个有key和value的二维数组
常量
LinkedHashMap
常用方法
遍历:
ThreeMap
少用
HashTable
古老实现类,线程安全,效率低
Properties
读取配置文件,key和value都是String类型
Collection工具类
解决线程安全
数据结构概述
结束
学习笔记整理,请求大佬指教!