------- android培训、java培训、期待与您交流! ----------
Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--Set
|--HashSet
底层数据结构是哈希表。
如何保证唯一性呢?
依赖两个方法:hashCode()和equals()
|--LinkedHashSet
底层数据结构是链表和哈希表。
有序,唯一。
|--TreeSet
底层数据结构是二叉树。
如何保证唯一性呢? 根据比较性的返回值是否是0.
两种方案:同时还可以进行排序。
元素具备比较性 Comparable
集合具备比较性 Comparator
Map
|--HashMap
底层数据结构是哈希表。对键有效。
如何保证唯一性呢?
依赖两个方法:hashCode()和equals()
|--LinkedHashMap
底层数据结构是链表和哈希表。
键 有序,唯一。
|--Hashtable
底层数据结构是哈希表。对键有效。线程安全的。
如何保证唯一性呢?
依赖两个方法:hashCode()和equals()
|--TreeMap
底层数据结构是二叉树。对键有效。
如何保证唯一性呢? 根据比较性的返回值是否是0.
两种方案:同时还可以进行排序。
元素具备比较性 Comparable
集合具备比较性 Comparator
3:集合的使用总结
考虑是否有键值对映射关系:
是:Map
是否要对键排序:
是:TreeMap
否:HashMap
不知道用谁,就用HashMap
否:Collection
元素是否唯一:
是:Set
元素是否需要排序:
是:TreeSet
否:HashSet
不知道用谁,就用HashSet
否:List
元素是否线程安全
是:Vector 也不用它。用Collections.synchronizedList(...)
否:ArrayList,LinkedList
查询多:ArrayList
增删多:LinkedList
不知道用谁,就用ArrayList
不知道用谁,就用ArrayList
4:集合的遍历方式
Collection
|--List
方式1:迭代器
方式2:增强for
方式3:普通for
如果需要索引,用普通for。否则就用增强for。
|--Set
方式1:迭代器
方式2:增强for
Map:
不能直接遍历,需要通过Set执行。
方式1:键值找值
方式2:通过映射关系找键值和值
5:可变参数
(1)参数个数不固定。
(2)格式:
修饰符 返回值类型 函数名(数据类型... 变量名)
{
}
注意:
这个变量其实是一个数组。
如果一个函数有多个参数,可变参数只能放在最后边。
(3)举例:
public static int sum(int... x)
{
int result = 0;
for(int i : x)
{
result+=i;
}
return result;
}
6:Arrays工具类的使用
(1)对数组进行操作的工具类
(2)要掌握的功能:
A:toString()
B:sort()
C:binarySearch()
(3)把数组变成集合的功能
asList(T... t)
注意:把数组转成集合后不能添加和删除。但是可以修改。
7:Collections工具类的使用
(1)对Collection集合进行操作的工具类
(2)Collection和Collections的区别
前者是集合的顶层接口,里面定义了集合的常见功能。
后者是对集合操作的工具类,里面定义了排序,查找等功能。
(3)需要了解
A:排序
B:查找
C:最大值
D:反转
E:随机置换