集合:容器
集合 : 长度不固定 只能放对象 对象的类型任意
数组 : 长度固定 能放任意类型数据 当初始化的时候固定了数据类型,数组中就只能放这个数据类型的对象
Collection: 接口 有允许重复的 有不允许重复的 有有序的 有无序的
List: 有序 并且允许重复的
ArrayList: 长度可变数组
优点:因为有下标,所以在查找或修改的时候执行效率较高
缺点:增删的时候可能会去移动大量的数据 ,执行效率 相对较低
LinkedList: 双向链表 , 堆栈结构
优点: 在增删的时候不需要移动大量数据, 执行效率相对较高
缺点: 根据 头尾地址存储的前后的元素,在查找的时候执行效率相对较低
Set: 无序并且不允许重复的
HashSet: 哈希表 初始容量是 16 加载因子 0.75
如何实现的不允许重复?
如果地址相同: 默认的hashcode 和equals就可以 根据地址相同 认为是同一元素 就不存储
地址不相同 内容相同: 重写 hashcode 和 equals方法
每当加入一条数据的时候 调用hashcode方法,如果hashcode值不相同,则不调用equals 直接存入集合
hashcode值相同,调用equals方法进一步确认各个属性值是否相同,如果不相同则直接存入集合,如果相同,则不存入集合
LinkedHashSet: 哈希表 链表结构
使用方式和hashset相同,实现不允许重复的方式也相同
不同点: LinkedHashSet 是有序的 利用的链表结构来帮助存储数据顺序的
HashSet 和 LinkedHashSet 不同点:
1 HashSet无序 LinkedHashSet有序
2 LinkedHashSet 指向效率相较于 HashSet较低, 需要记录存入顺序
TreeSet: 二叉树 无序 不允许重复的 可排序的
使用特点:
如果泛型中使用的是自定义类型, 类 必须 实现 排序(自然排序,定制排序)
否则,则会报 ClassCastException 类型转化异常
如何实现的不允许重复?
排序重写的方法中如果返回的是 0 则认为是相同元素 则不允许重复
如何实现排序?
两种方式:
1 自然排序:
1> 创建需要排序的类 实现 Comparable <需要排序的类型>
2> 重写 compareTo
返回值如果返回0 证明两个对象相同,则不能存入集合
如果返回 1 -1 升序 降序
调用者比参数大 返回1 就是升序
调用者比参数小 返回1 就是降序
允许出现 第一条件...第二条件...
3> 创建TreeSet集合 将类放入 TreeSet集合的泛型中
2 定制排序:
1> 创建需要排序的类
2> 创建比较器的类 实现 Comparator <需要排序的类>
3> 重写 compare方法
参数 o1 类似于 compareTo方法中的this 也就是调用者
参数 o2 类似于 compareTo方法中的参数
4> 创建TreeSet集合 泛型< 需要排序的类> 构造方法中 必须传递 比较器对象
Map<K,V> map集合 与Collection没有任何关系
K 是 键 不允许重复 无序 只能允许一个null值
V 是 值 允许重复 无序 允许有多个null值
K 和 V 是 映射项关系 一个键 必须对应着一个值
HashMap: 键 不允许重复 无序
HashMap的键 和 HashSet是一样的 HashSet的底层封装的是HashMap的键
如果重写hashcode 和equals只有 自定义类型放在key的位置的时候才会被调用
TreeMap: 键不允许重复 无序 可排序
TreeMap 如果将自定义类放在 key的位置 ,那这个类必须实现 自然排序或者 定制排序
否则报 ClassCastException
Hashtable
/**
* 面试题
*
* hashtable hashmap hashset的区别:
* 1 tashtable 和 hashmap 泛型有两个 以键值对的形式存在的
* hashset只有一个泛型
* 2 hashmap 和 hashset 初始容量 是 16
* hashtable 是11
* 3 hashmap 的 键 和 hashset 只允许有一个null值
* hashtable 键 和 值都不允许出现null值
* 4 hashtable 线程安全的 ,hashmap 线程不安全的
*
* 5 hashmap 在真正的hashcode的基础之上增加了一些过滤条件
* hashtable 直接使用的hashcode
*/
Properties: 持久化存储配置信息
Vector : java1.0 使用 ,java2.0 就被List替换了 线程同步的
泛型: 规范
自定义泛型
T type
E elements
类<E> 写 T 或者 E 都行
就证明这个类具有泛型 类中可以使用泛型作为属性 作为参数
泛型是根据创建 类对象的时候设定的数据类型改变的
受限制的泛型 类<E extends 限制类>
创建对象的时候 泛型中只能放置 限制类 和 限制类的子类
注意: 有序 是是否存储存入顺序
集合 : 长度不固定 只能放对象 对象的类型任意
数组 : 长度固定 能放任意类型数据 当初始化的时候固定了数据类型,数组中就只能放这个数据类型的对象
Collection: 接口 有允许重复的 有不允许重复的 有有序的 有无序的
List: 有序 并且允许重复的
ArrayList: 长度可变数组
优点:因为有下标,所以在查找或修改的时候执行效率较高
缺点:增删的时候可能会去移动大量的数据 ,执行效率 相对较低
LinkedList: 双向链表 , 堆栈结构
优点: 在增删的时候不需要移动大量数据, 执行效率相对较高
缺点: 根据 头尾地址存储的前后的元素,在查找的时候执行效率相对较低
Set: 无序并且不允许重复的
HashSet: 哈希表 初始容量是 16 加载因子 0.75
如何实现的不允许重复?
如果地址相同: 默认的hashcode 和equals就可以 根据地址相同 认为是同一元素 就不存储
地址不相同 内容相同: 重写 hashcode 和 equals方法
每当加入一条数据的时候 调用hashcode方法,如果hashcode值不相同,则不调用equals 直接存入集合
hashcode值相同,调用equals方法进一步确认各个属性值是否相同,如果不相同则直接存入集合,如果相同,则不存入集合
LinkedHashSet: 哈希表 链表结构
使用方式和hashset相同,实现不允许重复的方式也相同
不同点: LinkedHashSet 是有序的 利用的链表结构来帮助存储数据顺序的
HashSet 和 LinkedHashSet 不同点:
1 HashSet无序 LinkedHashSet有序
2 LinkedHashSet 指向效率相较于 HashSet较低, 需要记录存入顺序
TreeSet: 二叉树 无序 不允许重复的 可排序的
使用特点:
如果泛型中使用的是自定义类型, 类 必须 实现 排序(自然排序,定制排序)
否则,则会报 ClassCastException 类型转化异常
如何实现的不允许重复?
排序重写的方法中如果返回的是 0 则认为是相同元素 则不允许重复
如何实现排序?
两种方式:
1 自然排序:
1> 创建需要排序的类 实现 Comparable <需要排序的类型>
2> 重写 compareTo
返回值如果返回0 证明两个对象相同,则不能存入集合
如果返回 1 -1 升序 降序
调用者比参数大 返回1 就是升序
调用者比参数小 返回1 就是降序
允许出现 第一条件...第二条件...
3> 创建TreeSet集合 将类放入 TreeSet集合的泛型中
2 定制排序:
1> 创建需要排序的类
2> 创建比较器的类 实现 Comparator <需要排序的类>
3> 重写 compare方法
参数 o1 类似于 compareTo方法中的this 也就是调用者
参数 o2 类似于 compareTo方法中的参数
4> 创建TreeSet集合 泛型< 需要排序的类> 构造方法中 必须传递 比较器对象
Map<K,V> map集合 与Collection没有任何关系
K 是 键 不允许重复 无序 只能允许一个null值
V 是 值 允许重复 无序 允许有多个null值
K 和 V 是 映射项关系 一个键 必须对应着一个值
HashMap: 键 不允许重复 无序
HashMap的键 和 HashSet是一样的 HashSet的底层封装的是HashMap的键
如果重写hashcode 和equals只有 自定义类型放在key的位置的时候才会被调用
TreeMap: 键不允许重复 无序 可排序
TreeMap 如果将自定义类放在 key的位置 ,那这个类必须实现 自然排序或者 定制排序
否则报 ClassCastException
Hashtable
/**
* 面试题
*
* hashtable hashmap hashset的区别:
* 1 tashtable 和 hashmap 泛型有两个 以键值对的形式存在的
* hashset只有一个泛型
* 2 hashmap 和 hashset 初始容量 是 16
* hashtable 是11
* 3 hashmap 的 键 和 hashset 只允许有一个null值
* hashtable 键 和 值都不允许出现null值
* 4 hashtable 线程安全的 ,hashmap 线程不安全的
*
* 5 hashmap 在真正的hashcode的基础之上增加了一些过滤条件
* hashtable 直接使用的hashcode
*/
Properties: 持久化存储配置信息
Vector : java1.0 使用 ,java2.0 就被List替换了 线程同步的
泛型: 规范
自定义泛型
T type
E elements
类<E> 写 T 或者 E 都行
就证明这个类具有泛型 类中可以使用泛型作为属性 作为参数
泛型是根据创建 类对象的时候设定的数据类型改变的
受限制的泛型 类<E extends 限制类>
创建对象的时候 泛型中只能放置 限制类 和 限制类的子类
注意: 有序 是是否存储存入顺序