总结
ArrayList
-
ArrayList(实现List接口):
- 底层基于数组,可以存储不同类型可重复的多个数据(包括null)并且是有序的(输入和输出的结果一致)
- 他是线程不安全,线程安全的方式:List list = Collections.synchronizedList(new ArrayList(…));
- jdk1.6他的初始容量是10,jdk1.8初始容量是0
- 他实现RandomAccess,可以随机访问
-
ArrayList方法:
add addAll clear clone contains
get indexOf isEmpty remove set
size toArray
Arrays中的asList
-
ArrayList遍历:
- 普通for循环
- 增强for循环
- 迭代器
LinkedList
- LinkedList:
- 底层基于双向链表,可以存储多种类型数据的多个数据(可重复)并且是有序的,包括null
- 线程不安全,安全的方式: List list = Collections.synchronizedList(new LinkedList(…));
- 不能随机访问
- ArrayList方法:
- addFirst addLast peek poll pop push
- 其他的方法和ArrayList一致
- LinkedList遍历:
- 普通for循环
- 增强for循环
- 迭代器
LinkedList和ArrayList的区别
-
相同点
- 两个都可以存储不同类型多个数据(包括null),并且是有序可重复,
- 初始容量都是0
- 都是线程不安全
-
不同点
- ArrayList底层是基于数组的,LinkedList底层是基于双向链表的
- ArrayList有索引,所以检索和修改效率很高,但是随机增删效率不行,会牵扯到数组的创建和复制
- LinkedList没有索引,检索和修改效率不行(需要遍历整个链表),但是随即增删效率高
- 这些都是基于大量数据,少量数据大家都差不多
HashSet
-
HashSet:
- 底层基于HashMap
- 其中的数据无序不可重复,可以有null
- 线程不安全,线程安全方式:Set s = Collections.synchronizedSet(new HashSet(…));
-
HashSet遍历(没有提供输入索引获取元素的方法):
- forech
- 迭代器
-
HashSet的去重规则:
- 先通过hashcode比较,如果相同,再用equals比较
- 重写hashcode方法:将两个的hash值相加返回
- 重写equals方法:将两个对象的属性比较的布尔值返回
TreeSet
-
TreeSet:
- 底层基于TreeMap
- 无序不可重复,不能有null
- 可以存储任意类型,但是只能是一种类型,否则报错
- 线程不安全,线程安全方式:SortedSet s = Collections.synchronizedSortedSet(new TreeSet(…));
- 放入的数据如果没有实现Comparable或者没有加入比较器会报错
-
TreeSet遍历:
- 增强for循环
- 迭代器
-
定制排序方式:
让TreeSet添加的时候按照自己的方式排序
-
自然排序:
-
让自己要添加的类实现Comparable接口
-
重写compareTo方法 返回值:0 表示比较的类型一样保留一个
正数 降序
负数 升序
-
-
定制排序:
- 自己写一个比较器,放入TreeSet有参构造中
- 自己写的类实现Comparator接口,重写compare方法 两个值相减
-