集合框架,体系{
数组和集合
数组使用有局限性
不同集合适用不同的场景
集合框架由接口和类共同组成
}
Collection 集合{
代表一个集合 定义了集合最基本的操作 没有直接的实现类
但是有子接口 子接口有实现类 如 Set List
}
Collection 中方法{
应该有对容器操作的方法
存 取 全取 单取 删 集合交并差
addAll removeAll retainAll
有序集合:添加顺序和取出顺序一致
无序集合:添加顺序和取出顺序未必一致
List是有序的
Set是无序的
无序的时候用hash方法 快
有序用tree
}
集合的迭代{
遍历整个集合需要使用迭代器
jdk1.5以后提供了foreach方法来遍历集合
}
List{
是集合的一个子接口
List是一个有序 有下标 可重复的集合
ArrayList LinkedList Vector Stack
存入集合的对象一般都重写hashCode和equals
add(index,ele)
indexOf lastIndexOf
set get subList remove(index)
}
栈{
栈是一种数据结构 描述的是一种先进后出的顺序
Stack 是Vector的一个子类 描述了一个栈结构
栈的方法 入栈 push 出栈 pop peek看栈顶
Deque是队列
}
List的实现类对比{
ArrayList LinkedList Vector Stack
arrayList和linkedList的实现方式不一样
arrayList使用数组进行实现 查找快 插入删除慢 需要一整块连续的空间
linkedList使用链表进行实现 查找慢 插入快 无需连续空间
}
泛型{
jdk1.5 有了泛型 参数化类型 <Integer>
传递了类型之后就可以明确类型
用<类型>的语法来使用泛型
List<String> list=newArrayList<>();
使用泛型 <传>
定义泛型
两部分 A 声明泛型 <E> 可以声明在类 方法 构造器
B 使用泛型 传入类型即可
一个类继承或实现一个带泛型的父类或者接口需要传入泛型
泛型是不能继承的
?代表泛型的通配符
}
set集合{
set集合 的特点是无下标 不可重复 无序
set里的方法几乎和collection一致
Set 接口的常用实现类有
HashSet LinkedHashSet TreeSet
}
HashSet {
存 查效率非常高 可以和数组媲美
通过hash算法进行存取
hash算法:
向hashSet中存入的元素 会调用该元素的hashcode方法获得一个hashcode值
通过hashcode值计算存入集合的位置 判断集合中是否有值 再调用hashcode进行相同算法计算
取相应位置查找即可
问题:当元素个数超过数组长度时 hash冲突
如何解决hash冲突?
用链表的方法或者重hash的方法等等
容积越大 发生hash冲突的概率越小
}
LinkedHashSet{
LinkedHashSet 比 HashSet多了一个链表进行维护元素的顺序
用链表来维护有序 但性能要低于HashSet
}
TreeSet{
内部使用二叉树算法 实现了可排序的set集合
有要求 存入TreeSet的元素 要么具备可比较性 要么提供比较器
如果没有提供比较器 那么Treeet会调用元素的CompareTo方法进行比较
所以元素必须实现Comparable的接口
}
String实现了可比较接口 规则是按照字典顺序进行比较 a~z a在前 z在后
比较器{
Comparator 叫比较器 优先级比可比较性高
TreeSet 有一个构造器 可以传入比较器
可以匿名创建内部类 节省类文件
区别compareTo和 compare 方法
区别 Comparable和 Comparator
Comparable 叫可比较接口 放入TreeSet集合的元素应该实现该接口 元素具备自然顺序
当不满足元素的自然顺序又不能修改时 如String 可以对TreeSet传入Comparator比较器
用于指定比较规则
当元素有自然顺序 TreeSet又指定比较器时 比较器的优先级高
}
map{
Map是一个顶级接口(无父接口)
Map 描述了一种键值对的数据结构
Map中对值基本上没有要求 但对键有要求
Map的常用实现类
HashMap TreeMap LinkedHashMap
}
Map{
put(k,v) 向map中添加键值对 用于修改某个值 通过键取值
get(k)
remove(k)
提供一个map 所能获得的东西
键 值 键值对
//获得所有的键
Set<k> s=map.keySet();
syso(s);
for(String k:s){
}
//获得所有的值
Collection<v> c=map.values();
syso(c);
//获得所有的键值对
Set<Entry<k,v>> e=map.entrySet();
for(Entry<k,v> b:e){
System.out.println(b.getKey()+"***"+b.getValue());
}
containsKey 判断map中是否包含某个键
containsValues 判断map中是否包含某个值
}
map的实现类{
HashMap LinkedHashMap TreeMap 针对键而言
向hashmap中存入自定义的键值 重写hashcode和equals
LinkedHashMap 用链表维护了存入顺序
TreeMap 要求键 要么具备比较性 要么具备比较器
Hashtable 和 HashMap对比
table是古老的类 性能没有map好 hash运算的时候是取余运算符
map是位运算
table 不能放null HaspMap可以
table 线程安全 map不安全
}
两个工具类{
Arrays 数组的工具类
Collections 集合的工具类
}
数组和集合
数组使用有局限性
不同集合适用不同的场景
集合框架由接口和类共同组成
}
Collection 集合{
代表一个集合 定义了集合最基本的操作 没有直接的实现类
但是有子接口 子接口有实现类 如 Set List
}
Collection 中方法{
应该有对容器操作的方法
存 取 全取 单取 删 集合交并差
addAll removeAll retainAll
有序集合:添加顺序和取出顺序一致
无序集合:添加顺序和取出顺序未必一致
List是有序的
Set是无序的
无序的时候用hash方法 快
有序用tree
}
集合的迭代{
遍历整个集合需要使用迭代器
jdk1.5以后提供了foreach方法来遍历集合
}
List{
是集合的一个子接口
List是一个有序 有下标 可重复的集合
ArrayList LinkedList Vector Stack
存入集合的对象一般都重写hashCode和equals
add(index,ele)
indexOf lastIndexOf
set get subList remove(index)
}
栈{
栈是一种数据结构 描述的是一种先进后出的顺序
Stack 是Vector的一个子类 描述了一个栈结构
栈的方法 入栈 push 出栈 pop peek看栈顶
Deque是队列
}
List的实现类对比{
ArrayList LinkedList Vector Stack
arrayList和linkedList的实现方式不一样
arrayList使用数组进行实现 查找快 插入删除慢 需要一整块连续的空间
linkedList使用链表进行实现 查找慢 插入快 无需连续空间
}
泛型{
jdk1.5 有了泛型 参数化类型 <Integer>
传递了类型之后就可以明确类型
用<类型>的语法来使用泛型
List<String> list=newArrayList<>();
使用泛型 <传>
定义泛型
两部分 A 声明泛型 <E> 可以声明在类 方法 构造器
B 使用泛型 传入类型即可
一个类继承或实现一个带泛型的父类或者接口需要传入泛型
泛型是不能继承的
?代表泛型的通配符
}
set集合{
set集合 的特点是无下标 不可重复 无序
set里的方法几乎和collection一致
Set 接口的常用实现类有
HashSet LinkedHashSet TreeSet
}
HashSet {
存 查效率非常高 可以和数组媲美
通过hash算法进行存取
hash算法:
向hashSet中存入的元素 会调用该元素的hashcode方法获得一个hashcode值
通过hashcode值计算存入集合的位置 判断集合中是否有值 再调用hashcode进行相同算法计算
取相应位置查找即可
问题:当元素个数超过数组长度时 hash冲突
如何解决hash冲突?
用链表的方法或者重hash的方法等等
容积越大 发生hash冲突的概率越小
}
LinkedHashSet{
LinkedHashSet 比 HashSet多了一个链表进行维护元素的顺序
用链表来维护有序 但性能要低于HashSet
}
TreeSet{
内部使用二叉树算法 实现了可排序的set集合
有要求 存入TreeSet的元素 要么具备可比较性 要么提供比较器
如果没有提供比较器 那么Treeet会调用元素的CompareTo方法进行比较
所以元素必须实现Comparable的接口
}
String实现了可比较接口 规则是按照字典顺序进行比较 a~z a在前 z在后
比较器{
Comparator 叫比较器 优先级比可比较性高
TreeSet 有一个构造器 可以传入比较器
可以匿名创建内部类 节省类文件
区别compareTo和 compare 方法
区别 Comparable和 Comparator
Comparable 叫可比较接口 放入TreeSet集合的元素应该实现该接口 元素具备自然顺序
当不满足元素的自然顺序又不能修改时 如String 可以对TreeSet传入Comparator比较器
用于指定比较规则
当元素有自然顺序 TreeSet又指定比较器时 比较器的优先级高
}
map{
Map是一个顶级接口(无父接口)
Map 描述了一种键值对的数据结构
Map中对值基本上没有要求 但对键有要求
Map的常用实现类
HashMap TreeMap LinkedHashMap
}
Map{
put(k,v) 向map中添加键值对 用于修改某个值 通过键取值
get(k)
remove(k)
提供一个map 所能获得的东西
键 值 键值对
//获得所有的键
Set<k> s=map.keySet();
syso(s);
for(String k:s){
}
//获得所有的值
Collection<v> c=map.values();
syso(c);
//获得所有的键值对
Set<Entry<k,v>> e=map.entrySet();
for(Entry<k,v> b:e){
System.out.println(b.getKey()+"***"+b.getValue());
}
containsKey 判断map中是否包含某个键
containsValues 判断map中是否包含某个值
}
map的实现类{
HashMap LinkedHashMap TreeMap 针对键而言
向hashmap中存入自定义的键值 重写hashcode和equals
LinkedHashMap 用链表维护了存入顺序
TreeMap 要求键 要么具备比较性 要么具备比较器
Hashtable 和 HashMap对比
table是古老的类 性能没有map好 hash运算的时候是取余运算符
map是位运算
table 不能放null HaspMap可以
table 线程安全 map不安全
}
两个工具类{
Arrays 数组的工具类
Collections 集合的工具类
}