集合--查漏补缺
List特点:有序,不唯一(可重复)
ArrayList实现了长度可变的数组,在内存中分配连续的空间。
-
- 优点:遍历元素和随机访问元素的效率比较高
- 缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
LinkedList采用链表存储方式。
-
- 优点:插入、删除元素时效率比较高
- 缺点:遍历和随机访问元素效率低下
Iterator接口
-
- 所有的集合类均未提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,专门实现集合遍历
Iterator方法
-
- boolean hasNext():判断是否存在另一个可访问的元素
- Object next():返回要访问的下一个元素
- void remove():删除上次访问返回的对象
可以使用Iterator遍历的本质是什么?
-
- 实现Iterable接口
ListIterator接口
在循环的过程中可以执行增删操作
1 ListIterator li=al.listIterator(); 2 while(li.hasNext()){ 3 Object obj=li.next(); 4 if ("java2".equals(obj)) { 5 li.add("java9994"); 6 } 7 }
set接口
HashSet:采用Hashtable哈希表存储结构
-
- 优点:添加速度快,查询速度快,删除速度快
- 缺点:无序
LinkedHashSet
-
- 采用哈希表存储结构,同时使用链表维护次序
- 有序(添加顺序)
TreeSet
-
- 采用二叉树(红黑树)的存储结构
- 优点:有序(排序后的升序)查询速度比List快 (按照内容查询)
- 缺点:查询速度没有HashSet快
注★★★
❤HashSet和LinkedSet保证数据唯一的方法是先判断hashcode是否相同,如果相同则比较equals方法, 如果不同则不用比较,装入的自定义对象要重写hashcode方法和equals方法才可以实现数据的唯一性 ❤TreeSet保证数据唯一的方法是存入的数据类型必须需要实现Compareable接口 ❤只有TreeSet的toString方法输出的事按照类型实现的有序输出的
Collections的两个sort方法:
1 static <T extends Comparable<? super T>> void sort(List<T> list) 2 根据元素的自然顺序 对指定列表按升序进行排序。 3 static <T> void sort(List<T> list, Comparator<? super T> c) 4 根据指定比较器产生的顺序对指定列表进行排序。
一个参数的,集合中的数据类型要实现 Comparable接口
两个参数的是根据指定的排序方法,其中第二个参数是实现Comparator的类,重写的compare方法比较的是第一个参数的属性,第一个不用实现任何接口
Map接口
Map(接口)
-
- 特点key-value映射
HashMap
-
- Key无序 唯一(Set)
- Value无序 不唯一(Collection)
LinkedHashMap
-
- 有序的HashMap
TreeMap
-
- 有序 速度没有hash快
问题:Set与Map有关系吗?
-
- 采用了相同的数据结构,只用于map的key存储数据
HashMap和linkedHashMap的区别
-
- 人们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.
- HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
- HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。
- HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
- LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。
Collections工具类
类似于操作数组的Arrays工具类
-
- Collections和Collection不同,前者是集合的操作类,后者是集合接口
- Collections提供的静态方法
主要方法:
-
- static boolean addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。
- static <T extends Comparable<? super T>> void sort(List list) 根据元素的自然顺序 对指定列表按升序进行排序。
-
static void sort(List list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。
-
static int binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二分搜索法搜索指定列表,以获得指定对象。
-
static int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 使用二分搜索法搜索指定列表,以获得指定对象。
-
static void fill(List<? super T> list, T obj) 使用指定元素替换指定列表中的所有元素。
- static void reverse(List<?> list) 反转指定列表中元素的顺序。
集合总结几张图
集合常见面试题